2

我的目标是使用由两个变量“Alpha”和“Beta”分组的 pandas DataFrame 创建一个如下所示的分组条形图。 分组条形图

xl2 = xl.groupby(['Alpha','Beta']).median()

当我尝试这个时,在“Alpha”上抛出了一个 KeyError

import seaborn as sns
sns.barplot(x=['Alpha', 'Beta'], y=xl2['Gamma'])

我希望传递一个 x 值列表来索引('Alpha' 和 'Beta'),并绘制相关的 'Gamma' 图表。” seaborn.barplot 函数的文档没有提供任何组条形图示例。

谢谢你的帮助!

4

3 回答 3

4

您可以为此使用 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()

ggplot 分组条形图

于 2016-05-27T20:42:52.443 回答
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 你可能还想检查这个答案

于 2016-04-14T18:28:12.967 回答
-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 代码中的关键内容是:

  1. X 值是类别(df 中的“cat”)
  2. 颜色按类别分类
  3. Y 值是变量的中位数
  4. 不同的列代表不同的年份
于 2017-07-06T02:59:09.683 回答