pandas - boxplot中位数颜色设置问题

Fab*_*nna 6 python matplotlib pandas

我正在运行Pandas 0.16.2和Matplotlib 1.4.3.我有这个问题着色由以下代码生成的boxplot的中位数:

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()
Run Code Online (Sandbox Code Playgroud)

返回:

在此输入图像描述

看来该color设置未被读取.仅更改线条样式和线宽的设置,图表会正确反应.

medianprops = dict(linestyle='-.', linewidth=5, color='blue')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

任何人都可以重现它吗?

Diz*_*ahi 6

查看代码,DataFrame.boxplot()有一些特殊的代码来处理取代kws传递给matplotlib的不同元素的颜色boxplot.从理论上讲,似乎有一种方法可以传递一个color=包含带键的字典的参数,'boxes', 'whiskers', 'medians', 'caps'但是在boxplot()直接调用时我似乎无法使其工作.

但是,这似乎有效:

df.plot(kind='box', color={'medians': 'blue'}, 
        medianprops={'linestyle': '--', 'linewidth': 5})
Run Code Online (Sandbox Code Playgroud)

请参阅Pandas Boxplot示例


Fab*_*nna 1

实际上,以下解决方法效果很好,dict从 boxplot 命令返回 a :

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

fig, ax = plt.subplots()

bp = df.boxplot(return_type='dict')
Run Code Online (Sandbox Code Playgroud)

然后直接将颜色和线宽分配给中位数:

[[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()]
Run Code Online (Sandbox Code Playgroud)