使用Pandas vs. Matplotlib绘制groupby

时间:2015-12-05 14:17:22

标签: python pandas matplotlib

我是Pandas的新手,对不起,如果这个问题很简单,或者没有多大意义。

假设我有以下数据框(取自doc):

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

df = pd.DataFrame({
        'A' : ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
        'B' : ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
        'C' : np.random.randn(8),
        'D' : np.random.randn(8)}
)

值:

     A      B         C         D
0  foo    one -1.591757  0.016910
1  bar    one  0.540010  1.022113
2  foo    two -1.134974 -1.600034
3  bar  three  0.082130 -0.221179
4  foo    two  0.252851  1.963539
5  bar    two -3.012450  0.815712
6  foo    one -0.243863  0.615665
7  foo  three -2.558635 -2.405591

我计算C列和D列的平均值为B的任何值:

result = df.groupby("B").mean()

值:

              C         D
B                        
one   -0.431870  0.551563
three -1.238253 -1.313385
two   -1.298191  0.393072 

我可以使用plot的{​​{1}}方法绘制结果表:

DataFrame

dataframe plot method

现在,如果我想进一步操纵情节,直接使用result.plot() ,则会丢失图例,并用数字索引替换横坐标标签:

plt.plot

plt plot method

我如何使用plt.plot(result) 获得相同的情节?

1 个答案:

答案 0 :(得分:1)

获取对绘图的引用,然后使用标准的matplotlib命令从那里开始。

p = plt.subplot(111)
p.plot(result)
p.legend(['C', 'D'])
plt.xticks(list(range(len(result))), result.index)
plt.xlabel(result.index.name)

enter image description here

版本参考情节。有多个图时很有用:

p = plt.subplot(111)
p.plot(result)
p.legend(['C', 'D'])
p.set_xticks(list(range(len(result))))
p.set_xticklabels(result.index)
p.set_xlabel(result.index.name)