用于分类数据的seaborn条形图,已分组

时间:2018-08-29 00:15:03

标签: python pandas matplotlib seaborn

我想绘制按类别分组的分类数据条形图。

例如我有说6列的数据,下面用任意值填充

  

df = pd.DataFrame(np.arange(12).reshape(2,6),columns = ['A','B','C','D','E','F'] )

   A  B  C  D   E   F
0  0  1  2  3   4   5
1  6  7  8  9  10  11

,我想简单地将此简单信息绘制为条形图,其中对于每个列名AF,在行0上将显示一个条形(其名称在轴或内联上),并在其中显示一个条形。行1的竖线,每个竖线的高度都是该行和列的矩阵主体中的数字。

与普通的分组条形图一样,行0的所有条形应与行1的所有条形不同。简而言之,仅是按两行分组的类别A-F的直方图。

实际上,在我的真实数据中,每一行都具有真实名称,而不仅仅是索引号,在这里两行分别是01

到目前为止,我还没有找到通过Seaborn完成此任务的方法,只看到了一些关于matplotlib本身的可怕骇客。最简单的方法是什么?

有办法吗?

2 个答案:

答案 0 :(得分:1)

您可以像df.T.plot.bar()那样绘制转置后的数据帧。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.arange(12).reshape(2,6),columns=list("ABCDEF"))

df.T.plot.bar()

plt.show()

enter image description here

使用seaborn需要重塑(“融化”)数据框:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.DataFrame(np.arange(12).reshape(2,6),columns=list("ABCDEF"))

df2 = pd.melt(df.reset_index(), id_vars=["index"], value_vars=df.columns)

sns.barplot(data=df2, x="variable", y="value", hue="index")

plt.show()

enter image description here

答案 1 :(得分:1)

您可以使用plotly绘制分组的条形图。 plotly绘制图形和图表非常具有互动性和吸引力。这是一个例子。

导入库:

import pandas as pd
import numpy as np

import plotly.offline as py
py.init_notebook_mode(connected=True)
from plotly.offline import init_notebook_mode, iplot
init_notebook_mode(connected=True)

import plotly.graph_objs as go
import plotly.offline as offline
offline.init_notebook_mode()
import plotly.tools as tls

创建DataFrame:

df = pd.DataFrame(np.arange(12).reshape(2,6),columns=['A','B','C','D','E','F'])

条形图:

trace1 = go.Bar(x=df.columns.tolist(),y=df.loc[0].values,
                name='first_row')

trace2 = go.Bar(x= df.columns.tolist(),y=df.loc[1].values,
                name='second-row')

data = [trace1, trace2]
layout = go.Layout(barmode='group')

fig = go.Figure(data=data, layout=layout)
py.iplot(fig, filename='grouped-bar')

enter image description here