Pandas DataFrame Bar Plot - 绘制条形图特定Colormap中的不同颜色

时间:2017-06-12 07:15:30

标签: python pandas matplotlib plot

如何使用pandas数据帧plot方法绘制条形图的条形图

如果我有这个DataFrame:

df = pd.DataFrame({'count': {0: 3372, 1: 68855, 2: 17948, 3: 708, 4: 9117}}).reset_index()

   index  count
0      0   3372
1      1  68855
2      2  17948
3      3    708
4      4   9117

我需要设置df.plot()个参数,以便绘制图中的每个条:

  1. 使用'配对'颜色映射
  2. 绘制每个条形图的不同颜色
  3. 我在尝试什么:

    df.plot(x='index', y='count', kind='bar', label='index', colormap='Paired', use_index=False)
    

    结果:

    not different colors

    我已经知道的(是的,这有效,但同样,我的目的是要弄清楚如何只使用df.plot来执行此操作。当然必须有可能吗?):< / p>

    def f(df):
      groups = df.groupby('index')
    
      for name,group in groups:
        plt.bar(name, group['count'], label=name, align='center')
    
      plt.legend()
      plt.show()
    

    end result but used for loop

3 个答案:

答案 0 :(得分:3)

没有任何参数可以传递给df.plot,对于单个列,不同颜色的条形图 由于不同列的条形图的颜色不同,因此可以选择在绘图之前转置数据框,

ax = df.T.plot(kind='bar', label='index', colormap='Paired')

现在,这将绘制数据作为子组的一部分。因此,需要进行一些调整以正确设置限制和x标签。

import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame({'count': {0: 3372, 1: 68855, 2: 17948, 3: 708, 4: 9117}}).reset_index()

ax = df.T.plot(kind='bar', label='index', colormap='Paired')
ax.set_xlim(0.5, 1.5)
ax.set_xticks([0.8,0.9,1,1.1,1.2])
ax.set_xticklabels(range(len(df)))
plt.show()

enter image description here

虽然我猜这个解决方案符合问题的标准,但使用plt.bar实际上并没有错。单次调用plt.bar就足够了

plt.bar(range(len(df)), df["count"], color=plt.cm.Paired(np.arange(len(df))))

enter image description here

完整代码:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

df = pd.DataFrame({'count': {0: 3372, 1: 68855, 2: 17948, 3: 708, 4: 9117}}).reset_index()

plt.bar(range(len(df)), df["count"], color=plt.cm.Paired(np.arange(len(df))))

plt.show()

答案 1 :(得分:1)

您可以根据需要使用参数color为每列着色。

例如(例如,具有3个变量):

df.plot.bar(color=['C0', 'C1', 'C2'])

注意:上面提到的字符串'C0', 'C1', ...'是matplotlib中的内置快捷方式颜色句柄。它们表示活动配色方案中的第一,第二,第三默认颜色,依此类推。实际上,它们只是一个示例,您可以轻松地使用RGB代码或任何其他颜色约定来使用任何自定义颜色。

您甚至可以突出显示特定的列,例如,此处的中间一列:

df.plot.bar(color=['C0', 'C1', 'C0'])

要在给出的示例代码中重现它,可以使用:

import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame({'count': {0: 3372, 1: 68855, 2: 17948, 3: 708, 4: 9117}}).reset_index()

ax = df.T.plot(kind='bar', label='index', color=['C0', 'C1', 'C2', 'C3', 'C4'])
ax.set_xlim(0.5, 1.5)
ax.set_xticks([0.8,0.9,1,1.1,1.2])
ax.set_xticklabels(range(len(df)))
plt.show()

具有不同颜色的示例:

Example with different colors

任意重复颜色的示例:

Example with arbitrary repetition of colors

参考链接:Assign line colors in pandas

答案 2 :(得分:1)

除了@Jairo Alves工作以外,您还可以指定特定的十六进制代码

df.plot(kind="bar",figsize=(20, 8),color=['#5cb85c','#5bc0de','#d9534f'])

enter image description here