用seaborn绘制水平条形图

时间:2019-01-03 06:37:09

标签: python pandas seaborn

我正在爬目录并读取一堆文件并对其进行解析。我所需要的只是获取数据框的大小。我通过使用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)

但是我不知道如何指定类别,例如显示的here

这如何完成?我需要更改数据框格式吗?

我想得到这样的结果(来自MS Excel)

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以将两个DataFrame的concat与参数keys一起用于指定组,然后通过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)

答案 1 :(得分:1)

我认为可以使用seabon's barplot functionorient属性来实现。

示例-

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