【问题标题】:Simple barplot of column means using seaborn列的简单条形图意味着使用 seaborn
【发布时间】:2020-01-30 14:40:13
【问题描述】:

我有一个包含 26 列数字数据的 pandas 数据框。我想用 26 个条形表示条形图中每列的平均值。使用 pandas 绘图功能很容易做到这一点:df.plot(kind = 'bar')。但是,结果很难看,并且列标签经常被截断,即:

我想用 seaborn 来代替,但无论我多么努力,似乎都找不到方法。当然有一种简单的方法可以制作一个简单的列平均值条形图吗?谢谢。

【问题讨论】:

  • 请提供sample data。请显示尝试的代码块。请截图不想要的情节。
  • 你可以在plt.show()之前尝试:plt.tight_layout()。也可以考虑使用kind='barh'
  • 您的数据是宽格式的。考虑重塑为长格式,并在自己的列中除了数值之外有指标女性、男性等,然后按类别绘制。

标签: python pandas seaborn


【解决方案1】:

你可以试试这样的:

import matplotlib.pyplot as plt
import seaborn as sns
sns.set()

fig = df.mean().plot(kind='bar')
plt.margins(0.02)
plt.ylabel('Your y-label')
plt.xlabel('Your x-label')
fig.set_xticklabels(df.columns, rotation = 45, ha="right")
plt.show()

【讨论】:

    【解决方案2】:

    如果有人通过搜索找到这个,我找到的最简单的解决方案(我是 OP)是使用 pandas.melt() 函数。这会将所有列连接成一列,但会添加第二列,以保留与每个值相邻的列标题。该数据帧可以直接传递给 seaborn。

    【讨论】:

      【解决方案3】:

      df = pd.DataFrame({'x': [0, 1], 'y': [2, 3]})

      sns.barplot(x = df.mean().index, y = df.mean())

      plt.show()

      【讨论】:

      • 请添加一些描述
      【解决方案4】:

      你可以使用sns.barplot——尤其是horizontal barplots更适合这么多的类别——像这样:

      import seaborn as sns
      
      df = pd.DataFrame({'x': [0, 1], 'y': [2, 3]})
      unstacked = df.unstack().to_frame()
      sns.barplot(
          y=unstacked.index.get_level_values(0),
          x=unstacked[0]);
      

      【讨论】:

      • 谢谢,这很有用。但是,当我将数据框表示为这样的系列时,我会丢失错误栏。有谁知道我怎样才能保留它们?
      猜你喜欢
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 2015-09-13
      • 2021-07-28
      • 2015-07-09
      相关资源
      最近更新 更多