使用df.barplot时,python条形图中的颜色

时间:2016-02-16 03:20:40

标签: python pandas matplotlib colors boxplot

当我使用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')

但即使在这里我也需要进行一些数据转换以获得我想要的情节。

所以问题是如果我使用第一个选项,如何更改颜色,厚度等绘图属性。

我希望这很清楚。

2 个答案:

答案 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>]})])