访问通过panda调用的plot中的plot对象的句柄



我想利用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.container的列表,然后在第二次调用后再次获取,并获取设置的差异,但这没有奏效。

您正在查找轴的patches属性。使用[p.get_x() for p in ax.patches]可以获得原始的x位置。这将为每个修补程序提供左端点。

您需要为每个面片添加或减去一些值。类似于:new_xs = [p.get_x() - .5 for p in ax.patches]。然后set_x到新值:

>>>for p, x in zip(ax.patches, new_xs):
p.set_x(x)

您可能还需要将x_ticks展开得更多,或者使用p.set_width()使每个补丁的宽度更小。通过matplotlib完成这一切可能会更容易,而不是试图调整熊猫的回报。

最新更新