使用Pandas从数据透视表绘图

use*_*240 5 python plot matplotlib pandas

假设我有以下数据透视表(这是在文档中创建的数据透视表):

In [8]: tuples = list(zip(*[['bar', 'bar', 'baz', 'baz',
...:                 'foo', 'foo', 'qux', 'qux'],
...:                ['one', 'two', 'one', 'two',
...:                 'one', 'two', 'one', 'two']]))
...: 

In [9]: index = MultiIndex.from_tuples(tuples, names=['first', 'second'])

In [10]: df = DataFrame(randn(8, 2), index=index, columns=['A', 'B'])

In [11]: df2 = df[:4]

In [12]: df2
Out[12]: 
                     A         B
first second                    
bar   one     0.721555 -0.706771
      two    -1.039575  0.271860
baz   one    -0.424972  0.567020
      two     0.276232 -1.087401
Run Code Online (Sandbox Code Playgroud)

如何使用此表在轴上绘制"bar"和"baz"(第二个,A)(即我想用点(一,0.72)创建一个图,(二,-1.039) ,(1,-0.42),(2,0.276),其中前两个点以与后两个不同的颜色绘制.

我试过用

df2[[0]].plot() 
Run Code Online (Sandbox Code Playgroud)

但是这会在x轴上依次绘制点,以便它们被排序((条形,一条),.721),((条形,两条), - 1.09)等,而不是两个"一"点和两个"两个"点共用一个垂直轴.

use*_*240 6

好的,我想通了。关键是先拆开数据:

import matplotlib.pyplot as plt

t=df2.unstack(level=0)
plt.plot(t[[0]], color='red')
plt.plot(t[[1]], color='blue')
plt.xticks(range(2), ['one','two'], size='small')

plt.show()
Run Code Online (Sandbox Code Playgroud)