【问题标题】:facecolor kwarg for Matplotlib stacked histogramMatplotlib 堆叠直方图的 facecolor kwarg
【发布时间】:2013-07-04 23:08:51
【问题描述】:

我无法控制使用 Matplotlib 的 hist 函数和 stacked=True 绘制的直方图的颜色和线型。对于单个非堆叠直方图,我没有问题:

import pylab as P

mu, sigma = 200, 25
x0 = mu + sigma*P.randn(10000)

n, bins, patches = P.hist(
    x0, 20,
    histtype='stepfilled',
    facecolor='lightblue'
    )

但是,当我引入额外的直方图时,

import pylab as P

mu, sigma = 200, 25
x0 = mu + sigma*P.randn(10000)
x1 = mu + sigma*P.randn(7000)
x2 = mu + sigma*P.randn(3000)

n, bins, patches = P.hist(
    [x0,x1,x2], 20,
    histtype='stepfilled',
    stacked=True,
    facecolor=['lightblue','lightgreen','crimson']
    )

它会抛出以下错误:

ValueError: to_rgba: Invalid rgba arg "['lightblue', 'lightgreen', 'crimson']"
could not convert string to float: lightblue

使用color=['lightblue', 'lightgreen', 'crimson'] 选项确实有效,但我想分别直接控制填充和线条颜色,同时能够使用命名的 Matplotlib 颜色。我使用的是 Matplotlib 1.2.1 版。

【问题讨论】:

    标签: python-2.7 matplotlib histogram


    【解决方案1】:

    facecolor 需要是单个命名颜色,而不是列表,而是添加这个 在您使用P.hist 之后可能会为您完成工作:

    for patch in patches[0]: patch.set_facecolor('lightblue')
    for patch in patches[1]: patch.set_facecolor('lightgreen')
    for patch in patches[2]: patch.set_facecolor('crimson')
    

    【讨论】:

    • 确实有效,但有没有办法通过 hist 内联做到这一点?