如何在matplotlib中选择直方图条的唯一颜色?

7
我试图在同一图中绘制多个直方图,但发现某些颜色被分配给不同的系列,这有点困扰。是否有一种方法可以强制颜色条唯一?对于小数据集有效,但当我使用大量数据时,这个问题会再次出现。以下是一个示例,蓝色被分配两次给两个不同的数据样本。

enter image description here

所有在matplotlib中给直方图属性颜色的例子和解决方案(至少是我找到的)都建议将x轴标准化在0到1之间,例如this example, 但这并不是我想要的,因为在我的情况下,拥有真实值非常重要。
有其他解决方案吗?
谢谢。
编辑
我想到的一个解决方案是将cmap调色板转换为numpy数组,并通过调用此调色板使用pyplot hist color。
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
你在plot函数中也需要它吗?你能给出一些示例代码来展示你想绘制的内容以及哪些部分应该有不同的颜色吗?(也许这篇帖子已经是你所需的了。) - Falko
嗯,这确实是我正在寻找的,非常感谢@Falko。 - Rad
请查看以下答案:https://dev59.com/3aHia4cB1Zd3GeqPU4dY#61794768。 - Ștefan
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))

结果: enter image description here 希望这正是您所需要的。

正如我在问题中所说,我并不打算将x轴的值从0标准化为1。很遗憾。 - Rad
1
你不必这样做。分配颜色与你的x和y值无关。 - Falko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接