我想画一个分类数据的条形图,按系列分组。
例如,我有6列数据,下面用任意值填充:
df=pd。数据帧(np.arange(12)。重塑(2,6),列=['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
我想简单地把这个简单的信息绘制成一个条形图,其中对于每个列名a-F,都会显示一个条形图(其名称在轴上或内联)用于行0
,一个条形图用于行1
,每个条形图的高度都是该行和列矩阵体中的数字。
与普通分组条形图一样,行0
的所有条形图的颜色应与行1
的不同。简单地说,只是两行分组的类别a-F的直方图。
实际上,在我的真实数据中,每行都有一个真实的名称,而不仅仅是两行的索引号。
到目前为止,我还没有找到用seborn完成这件事的方法,只看到matplotlib本身发生了一些可怕的黑客攻击。最简单的方法是什么?
有办法吗?
您可以像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()
使用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()
可以使用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
创建数据帧:
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')