Я хотел бы использовать функцию построения столбцов с накоплением в 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 после первого вызова, а затем еще раз после второго и взять установленную разницу, но это не сработало.
df2.plot()
вы устанавливаетеax=ax
, который изменяет предыдущий объект осей. Выax2
объект являетсяax
. Так что в ax.patches будут патчи как изdf.plots()
. Вы можете получить новые, определив выполнениеax=df1.plot(...); old_patches = set(ax.patches)
. Затем сделайтеdf2.plot(ax=ax,...); new_patches=set(ax.patches) - old_patches
. Это становится немного хакерским. 21.02.2014