【问题标题】:seaborn barplot to compare values from a dataframe with two rowsseaborn barplot 将数据框中的值与两行进行比较
【发布时间】:2021-11-20 17:52:18
【问题描述】:

我有一个看起来像这样的数据框。

      - X_1     - X_2     - X3      - ....
0     - float64 - float64 - float64 - ...
1     - ...

例如:df=pd.DataFrame({"X_1": [4, 2], "X_2": [2, 3], "X_3": [1, 1]})

在我的例子中,有两行几十列。 我正在尝试制作一个条形图,并排显示索引 0 和 1 处的值,从最大到最小,按索引 0 排序。例如,

      |
      |  0
value |  0         1
      |  0 1     0 1
      |  0 1     0 1     0 1
      _______________________
         X_1     X_2     X_3

当我尝试运行下面的命令时,我得到了几个不同的错误。

我运行这个: order=df.sort_values(df.iloc[0], ascending=False).df.columns

然后得到这个: AttributeError: 'list' object has no attribute 'sort_values

如果我只是忽略订购,我试试这个: sns.barplot(df, x=df.columns, y=df.values)

我明白了:ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我怀疑我需要重新塑造我的 dataFrame 以使其更友好。 我认为可能可行的形状如下所示。

Category - Y_1     - Y2
X_1      - float64 - float64
X_2      - float64 - float64
X_3      - float64 - float64
...

然后,我想我可以成功地完成我的排序和绘图。

订购。 order=df.sort_values(Y_1, ascending=False).Category Plot. sns.barplot(df, x=df.Category, y=df.columns~'Category')

我的问题是: 如何从我的数据框中获得所需的图(如上图所示)? 我概述了一些我认为我在那里领导的东西,但这可能完全没有指导意义。 如果您有任何想法,请告诉我。 谢谢!

【问题讨论】:

  • sns.barplot(data=df.reset_index().melt(id_vars='index'), x='variable', y='value', hue='index') 使用 seaborn,重置索引以用作 hue 的列,并使用 .melt 转换为长格式。 Plot

标签: python pandas dataframe seaborn visualization


【解决方案1】:

你可以这样做:

df.T.plot.bar()

这会给你(使用你的问题中定义的df):

【讨论】:

  • 如果这不是你想要的,请告诉我:)
  • 是的!这几乎正​​是我所需要的!但是,如果 X_1,X_2,有没有办法从最大到最小排序。 X_3 尚未排序?我应该用一个他们还没有的例子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多