使用Seaborn绘制水平条形图

5
我正在遍历一个目录并读取一些文件并解析它们。我只需要获取数据帧的大小。我使用len(df.index)来实现这一目的。
每个目录都有10个文件,从0到9编号。我将所有这些len(df.index)添加到一个数据帧中,其中字母['A', 'B', 'C', 'D']来自类别列表。这些值通过df2.loc[seed,nd] = len(df.index)添加到数据帧中。结果数据帧如下:
         A         B         C       D
0  10515.0  160592.0  221621.0  198884.0
1   9777.0  161307.0  222064.0  199841.0
2  10957.0  159954.0  219553.0  198622.0
3  12731.0  157862.0  221250.0       NaN
4  11765.0  162177.0       NaN       NaN
5   8849.0  155631.0       NaN       NaN
6  10549.0  160976.0       NaN       NaN
7   8694.0  158953.0       NaN       NaN
8  11696.0  160952.0       NaN       NaN
9  10590.0  161046.0       NaN       NaN

在我的脚本中,我使用for循环爬取两个目录,XZ,生成了两个像上面那样的数据框。

问题在于,我想使用Seaborn水平条形图绘制这个数据框,代码如下:

sns.barplot(data=df2)

但是我不知道如何指定类别,例如这里显示的(链接)

如何实现这个目标?我需要更改我的数据框格式吗?

我希望结果像这样(来自MS Excel)

enter image description here


对于这四个类别,X和Z是什么? - meW
指定类别没有缺失列吗? - jezrael
抱歉,我忘了提到我爬取了两个目录,Z和X。我会编辑帖子。 - user8200327
2个回答

21

我认为可以使用seaborn的条形图函数orient属性来实现这一点。

示例 -

import pandas as pd
import numpy as np
import seaborn as sns
df = pd.DataFrame(np.random.randint(0,10,size=(10, 4)), columns=list('ABCD'))
sns.barplot(data=df, orient = 'h')

example plot


1
你可以使用带有参数keysconcat函数对两个数据框进行分组,然后使用melt函数进行重塑,最后使用参数hue来指定分组:
dfs = [df21, df22]

df = pd.concat(dfs, keys=('X','Z')).reset_index(level=0).melt('level_0')
sns.barplot(x='value', y='variable', hue='level_0', data=df)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接