pandas - 箱线图中位数颜色设置问题

7
我正在使用Pandas 0.16.2和Matplotlib 1.4.3。我在以下代码生成的箱线图中遇到了一个问题,即如何着色箱线图的中位数:
df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E'])

fig, ax = plt.subplots()

medianprops = dict(linestyle='-', linewidth=2, color='blue')

bp = df.boxplot(medianprops=medianprops)

plt.show()

这返回:

enter image description here

看起来color设置没有被读取。只更改线条样式和线宽的设置,图表会正确响应。

medianprops = dict(linestyle='-.', linewidth=5, color='blue')

在这里输入图片描述

有人能够复制它吗?

2个回答

8
观察DataFrame.boxplot()代码,有一些特殊代码来处理不同元素的颜色,这些代码优先于传递给matplotlib's boxplotkws参数。理论上,似乎可以通过传递一个包含键为'boxes'、'whiskers'、'medians'、'caps'的字典的color=参数,但我在直接调用boxplot()时似乎无法使其工作。
然而,这似乎有效:
df.plot(kind='box', color={'medians': 'blue'}, 
        medianprops={'linestyle': '--', 'linewidth': 5})

请查看Pandas 箱线图示例

1
谢谢,但是为了绘制多重索引数据框,我需要使用带有“by”列的boxplot函数,而不是kind='box'版本。 - Fabio Lamanna
实际上,使用这个答案它有效! - Fabio Lamanna

1

实际上,以下解决方法很有效,从boxplot命令返回一个dict

df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E'])

fig, ax = plt.subplots()

bp = df.boxplot(return_type='dict')

然后直接将颜色和线宽分配给中位数,方法如下:

[[item.set_color('r') for item in bp[key]['medians']] for key in bp.keys()]
[[item.set_linewidth(0.8) for item in bp[key]['medians']] for key in bp.keys()]

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