【问题标题】:matplotlib categorical bar chart creates unwanted whitespacematplotlib 分类条形图创建不需要的空白
【发布时间】:2017-06-22 03:32:57
【问题描述】:

我有一个如下所示的数据框:

import numpy as np
import pandas as pd

location = list(range(1, 34))
location += [102, 172]
stress = np.random.randint(1,1000, len(location))
group = np.random.choice(['A', 'B'], len(location))

df = pd.DataFrame({'location':location, 'stress':stress, 'group':group})
df[['location', 'group']] = df[['location', 'group']].astype(str)

注意:locationgroup 都是字符串

我正在尝试创建一个条形图,以便 location(分类)位于 x 轴上,stress 是每个条形的高度。此外,我想为每个group 使用不同的颜色为每个条上色

我尝试了以下方法:

f, axarr = plt.subplots(1, 1)
axarr.bar(df['location'], df['stress'])
plt.xticks(np.arange(df.shape[0]) + 1, df['location'])
plt.show()

但是,这会产生:

我不确定为什么端栏之间有空格。我猜是因为location 中的102172 值,但是,该列是一个字符串,所以我希望它被视为一个分类变量,所有条形都彼此相邻不管location“价值”。我试图通过手动指定 xtick 位置和标签来纠正这个问题,但它似乎不起作用

最后,有没有一种快速的方法可以通过 group 为每个条形着色,而无需手动迭代每个唯一的 group 值?

【问题讨论】:

    标签: python pandas matplotlib plot bar-chart


    【解决方案1】:

    如果您的 location 是分类数据,请不要使用它制作条形图。稍后使用np.arange(df.shape[0]) 制作条形图并设置刻度标签:

    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    
    location = list(range(1, 34))
    location += [102, 172]
    stress = np.random.randint(1,1000, len(location))
    group = np.random.choice(['A', 'B'], len(location))
    
    df = pd.DataFrame({'location':location, 'stress':stress, 'group':group})
    df[['location', 'group']] = df[['location', 'group']].astype(str)
    f, axarr = plt.subplots(1, 1)
    bars = axarr.bar(np.arange(df.shape[0]), df['stress'])
    for b, g in zip(bars.patches, df['group']):
        if g == 'A':
            b.set_color('b')
        elif g == 'B':
            b.set_color('r')
    plt.xticks(np.arange(df.shape[0]) + bars.patches[0].get_width() / 2, df['location'])
    plt.setp(axarr.xaxis.get_ticklabels(), rotation=90)
    plt.show()
    

    不知道有没有简洁的方法批量设置条形颜色。迭代还不错……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-19
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 2013-12-11
      相关资源
      最近更新 更多