如何在matplotlib中选择直方图条形的独特颜色?

7 投票
1 回答
6938 浏览
提问于 2025-04-18 17:52

我想在同一个图上画几个直方图,但我发现不同的数据系列被分配了相同的颜色,这让我有点困扰。有没有办法让颜色条是独一无二的呢?

对于小数据集,这个问题不大,但当我使用大量数据时,这个问题又出现了。

这里有个例子,蓝色被分配给了两个不同的数据样本。

在这里输入图片描述

在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))

结果:

在这里输入图片描述

希望这正是你想要的。

撰写回答