【问题标题】:Pandas DataFrame Bar Plot - Plot Bars Different Colors From Specific ColormapPandas DataFrame Bar Plot - 从特定颜色图中绘制不同颜色的条形图
【发布时间】:2017-11-13 13:47:15
【问题描述】:

您如何使用 pandas 数据框plot 方法绘制不同颜色的条形图?

如果我有这个数据框:

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. 用不同的颜色绘制每个条形

我正在尝试什么:

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

结果:

我已经知道的(是的,这行得通,但我的目的是要弄清楚如何仅使用df.plot 来做到这一点。肯定有可能吗?):

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()

【问题讨论】:

    标签: python pandas matplotlib plot


    【解决方案1】:

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

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

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

    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()
    

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

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

    完整代码:

    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()
    

    【讨论】:

    • 有没有办法给它的高度的bar函数着色,并在右侧添加一个垂直的颜色条?
    • @AjanO 那会显示here
    【解决方案2】:

    您可以使用参数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()
    
    

    不同颜色的例子:

    任意重复颜色的例子:

    参考链接:Assign line colors in pandas

    【讨论】:

    • 我不认为这是真的。你有使用我上面的数据的可行示例吗?
    • @Jarad 是的,它也适用于您的示例。我会更新答案以添加它。
    • 好东西!我可以让你的例子起作用。您回答中对'C0', 'C1', 'C2', 'C3', 'C4' 部分的任何解释肯定会帮助遇到此问题的任何人。这对我来说有点神秘。 c 代表什么,需要大写吗?等等。
    • @Jarad 刚刚为答案添加了解释。 (C0、C1 等)
    【解决方案3】:

    除了/扩展@Jairo Alves 工作,您还可以指明具体的十六进制代码

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

    【讨论】:

      猜你喜欢
      • 2022-11-13
      • 2015-11-07
      • 2019-03-23
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多