当我使用matplotlibs命令时,我能够获得非常漂亮的彩色条形图。 This非常有用,它使用了一些着色命令,如
for box in bp['boxes']:
# change outline color
box.set( color='#7570b3', linewidth=2)
# change fill color
box.set( facecolor = '#1b9e77' )
但是,使用这些boxplot命令的问题,数据应该在x轴上已经按需要分组。关于S.O.的My last question就在那,正如回复中所建议的,我可以使用
df.boxplot('data1',by='data2')
这对我很有用,因为我可以使用我的数据。但是,我不能在这里使用一些着色选项。事实上,参数color
也不被接受作为参数,如在这样的几个例子中所示
df.plot(kind='box',color='red')
但我仍然更喜欢使用df.boxplot
命令(可能我需要了解更多其他选项)。
显然,我是python的新手,甚至是绘图工具的新手,所以我不明白这些选项中的每一个是如何工作的,但是我想深入了解制作条形图和添加颜色的最快方法是什么它。
所以我的问题是如果我使用df.boxplot
编辑:添加工作示例以显示我要查找的内容
如果我有这样的数据框
import numpy as np
import pandas as pd
import matplotlib.pylab as plt
df=pd.DataFrame(np.random.rand(10,2),columns=['data1','data2'])
df['group']=['A','B','C','A','B','C','A','B','C','A']
我正在使用以下命令绘制一个框图,其中数据按列group
分组,我希望看到列'data1'的扩散。
plt.figure(3)
df.boxplot(column='data1',by='group')
如何为其添加颜色?
如果使用此命令,我知道如何添加颜色
plt.figure(1)
data2plot=[df['data1'],df['data2']]
plt.boxplot(data2plot)
这不会给出我想要的情节并得到我想要的情节,我真的必须使用以下代码:
grA=[val for ind, val in zip(df['group'],df['data1']) if ind=='A']
grB=[val for ind, val in zip(df['group'],df['data1']) if ind=='B']
grC=[val for ind, val in zip(df['group'],df['data1']) if ind=='C']
plt.figure(2)
data2plot_new=[grA,grB,grC]
plt.boxplot(data2plot_new)
如果我使用上述方法,我知道如何添加颜色,但效果不佳。
我知道可以使用'color'参数的另一个选项是
df.plot(data2plot,kind='box',color='red')
但即使在这里我也需要进行一些数据转换以获得我想要的情节。
所以问题是如果我使用第一个选项,如何更改颜色,厚度等绘图属性。
我希望这很清楚。
答案 0 :(得分:1)
来自@Goyo的更完整答案应该是
box1=df.boxplot('data1',by='group',return_type='dict',patch_artist=False)
[x.set(color='g',linewidth=2) for x in box1['data1']['boxes']]
[x.set(facecolor='r') for x in box1['data1']['boxes']]
(@ Goyo,虽然你的答案肯定帮助我挖掘了更多信息,但有趣的是你抱怨我的问题不完整,然后发布了一个不完整的答案!)。
我将此作为答案发布,因为它符合我目前的目的。
答案 1 :(得分:0)
使用return_type='dict'
。
df.boxplot(column='data1',by='group', return_type='dict')
OrderedDict([('data1',
{'boxes': [<matplotlib.lines.Line2D at 0x9986e70>,
<matplotlib.lines.Line2D at 0x999e2f0>,
<matplotlib.lines.Line2D at 0x99ab9d0>],
'caps': [<matplotlib.lines.Line2D at 0x99926b0>,
<matplotlib.lines.Line2D at 0x99929f0>,
<matplotlib.lines.Line2D at 0x999ed90>,
<matplotlib.lines.Line2D at 0x99ab0f0>,
<matplotlib.lines.Line2D at 0x9a6d470>,
<matplotlib.lines.Line2D at 0x9a6d7b0>],
'fliers': [<matplotlib.lines.Line2D at 0x9992ff0>,
<matplotlib.lines.Line2D at 0x99ab770>,
<matplotlib.lines.Line2D at 0x9a6de30>],
'means': [],
'medians': [<matplotlib.lines.Line2D at 0x9992d10>,
<matplotlib.lines.Line2D at 0x99ab410>,
<matplotlib.lines.Line2D at 0x9a6dad0>],
'whiskers': [<matplotlib.lines.Line2D at 0x9986fd0>,
<matplotlib.lines.Line2D at 0x9992370>,
<matplotlib.lines.Line2D at 0x999e710>,
<matplotlib.lines.Line2D at 0x999ea50>,
<matplotlib.lines.Line2D at 0x99abdd0>,
<matplotlib.lines.Line2D at 0x9a6d130>]})])