【发布时间】:2014-02-20 15:41:41
【问题描述】:
我想利用 pandas DataFrames 的堆积条形图功能。但是,我想通过修改刚刚绘制的条形来跟进。为此,我需要访问他们的图形句柄。但是我从 df.plot() 得到的只是一个轴句柄。 如何获取在特定呼叫中专门创建的内容的列表?这将是必要的,例如,如果在之前的绘图中同一轴上有预先存在的对象,并且我想区分,即只处理新的对象。这是我的代码,它在同一轴上绘制了两次。我希望最终让堆叠的条彼此相邻,所以我想我可以让它们更窄一点,然后左右移动。但为此,我需要处理第二次通话中所做的事情。
import random
import pandas as pd
import numpy as np
from pylab import *
close('all')
df = pd.DataFrame(np.random.random((7, 5)) * 10,
index=list('abcdefg'), columns=list('ABCDE'))
print df
ax = df.plot(kind='bar', stacked=True, align='center')
c1=ax.containers
hh=findobj(ax,lambda xx:hasattr(xx,'width'))
setp(hh,'width',.3)
print hh
df2= pd.DataFrame(np.random.random((6, 5)) * 10,
index=list('abcdef'), columns=list('FGHIJ'))
ax2 = df2.plot(kind='bar', stacked=True, align='center', ax=ax,colormap='bone')
c2=ax2.containers
print ax==ax2 # Should be true
c1==c2 # Should be False
show()
我尝试在第一次调用后获取容器列表 ax.containers,然后在第二次调用后再次获取,并获取设置的差异,但这没有用。
【问题讨论】:
-
实际上,如果我在每种情况下都使用 list(gca().containers) ,那么它工作正常,并且 set(c2)-set(c1) 得到了我想要的。所以我认为这是我自己问题的答案。
标签: python matplotlib plot pandas