我的目标是创建一个类似下面的分组条形图,使用由两个变量分组的pandas DataFrame" Alpha"和" Beta。"
xl2 = xl.groupby(['Alpha','Beta']).median()
当我尝试这个时,就会抛出一个KeyError' Alpha'
import seaborn as sns
sns.barplot(x=['Alpha', 'Beta'], y=xl2['Gamma'])
我希望传递一个x值列表来索引(' Alpha'' Beta'),并绘制相关的Gamma图。&#34 ; seaborn.barplot function的文档不提供任何组条形图示例。
感谢您的帮助!
答案 0 :(得分:3)
您可以将ggplot用于此
from ggplot import *
import pandas as pd
import numpy as np
df = pd.DataFrame({
"x": np.random.choice(range(2001, 2008), 250),
"w": np.random.uniform(50, 400, 250),
"cat": np.random.choice(["A", "B", "C", "D", "E"], 250)
})
print ggplot(df, aes(x='x', weight='w', fill='cat')) + geom_bar() + theme_bw()
答案 1 :(得分:0)
是你想要的吗?
In [167]: df
Out[167]:
a b c
0 2 2 1
1 3 3 1
2 2 2 1
3 2 3 0
4 3 2 2
5 3 3 2
6 1 2 2
7 1 2 2
8 0 2 3
9 3 2 3
10 2 2 0
11 2 1 2
12 2 1 0
13 1 2 1
14 0 2 3
15 0 3 3
16 3 1 2
17 0 1 1
18 0 2 2
19 0 1 0
In [168]: plot = df.groupby(['a','b']).mean()
In [169]: plot
Out[169]:
c
a b
0 1 0.500000
2 2.666667
3 3.000000
1 2 1.666667
2 1 1.000000
2 0.666667
3 0.000000
3 1 2.000000
2 2.500000
3 1.500000
In [170]: sns.barplot(x=plot.index, y=plot.c)
PS如果您需要不同的东西,请提供样本数据集和预期的分组结果DF(以text / dict / JSON / CSV格式)
PPS您可能还想查看this answer
答案 2 :(得分:-1)
Altair在这种情况下可能会有所帮助。以下是由以下代码生成的图表。
import pandas as pd
import numpy as np
from altair import *
np.random.seed(0)
df = pd.DataFrame({
"x": np.random.choice(range(0, 5), 250),
"w": np.random.uniform(50, 400, 250),
"cat": np.random.choice(["A", "B", "C", "D", "E"], 250)
})
Chart(df).mark_bar().encode(x=X('cat', axis=False),
y=Y('median(w)', axis=Axis(grid=False)),
color='cat',
column=Column('x', axis=Axis(axisWidth=1.0, offset=-8.0, orient='bottom'),scale=Scale(padding=30.0)),
).configure_facet_cell( strokeWidth=0.0).configure_cell(width=200, height=200)
altair代码中的关键内容是: