如何在matplotlib中选择直方图条形的独特颜色?
我想在同一个图上画几个直方图,但我发现不同的数据系列被分配了相同的颜色,这让我有点困扰。有没有办法让颜色条是独一无二的呢?
对于小数据集,这个问题不大,但当我使用大量数据时,这个问题又出现了。
这里有个例子,蓝色被分配给了两个不同的数据样本。
在matplotlib中,所有关于给直方图上色的例子和解决方案(至少是我找到的那些)都建议将x轴归一化到0到1之间,比如这个例子,但这不是我想要的,因为在我的情况下,真实的数值非常重要。
有没有其他的解决办法呢?
谢谢
编辑
我想到的一个解决办法是把一个颜色映射调色板转换成numpy数组,然后在绘制直方图时调用这个调色板来上色。
N = len(list_of_samples)
sample_colors = cm.get_cmap('RdYlBu', N)
palette = sample_colors(np.arange(N))
但这只适用于直方图,对于绘图函数,我收到了这个错误信息。
ValueError: to_rgba: Invalid rgba arg "[[ 0.64705884 0. 0.14901961 1. ]
[ 0.89187675 0.2907563 0.20000001 1. ]
[ 0.98711484 0.64593837 0.36358543 1. ]
[ 0.99719888 0.91316527 0.61736696 1. ]
[ 0.91316529 0.96638656 0.90868344 1. ]
[ 0.63977591 0.82633053 0.90028011 1. ]
[ 0.34957983 0.55294117 0.75462185 1. ]
[ 0.19215687 0.21176471 0.58431375 1. ]]"
only length-1 arrays can be converted to Python scalars
1 个回答
8
这里有一个关于直方图的解决方案:
import pylab as pl
N, bins, patches = pl.hist(pl.rand(1000), 20)
jet = pl.get_cmap('jet', len(patches))
for i in range(len(patches)):
patches[i].set_facecolor(jet(i))
结果:
希望这正是你想要的。