我的大脑疼
我有一些代码可以在一个长列中生成33个图形
#fig,axes = plt.subplots(nrows=11,ncols=3,figsize=(18,50))
accountList = list(set(training.account))
for i in range(1,len(accountList)):
training[training.account == accountList[i]].plot(kind='scatter',x='date_int',y='rate',title=accountList[i])
#axes[0].set_ylabel('Success Rate')
我想把每一个情节都写进我在上面评论过的数字里,但是我所有的尝试都失败了。我试着把
ax=i
放到plot命令中,得到了'numpy.ndarray' object has no attribute 'get_figure'
。而且,当我缩小比例,用一个图一个图的一个图来做这个时,我的x和y比例都会变为heck。我觉得我已经接近答案了,但我需要一点压力。谢谢。 最佳答案
subplots
返回的轴句柄根据请求的子批次数量而变化:
对于(1x1),您得到一个单手柄,
对于(n x 1或1 x n),您会得到一个1d数组的句柄,
对于(m x n),您会得到一个二维的句柄数组。
您的问题似乎是由第2到第3种情况(即,一维到二维轴阵列)的界面变化引起的。如果您事先不知道数组的形状,下面的代码片段将有所帮助。
我发现numpy的unravel_index
对于遍历轴很有用,例如:
ncol = 3 # pick one dimension
nrow = (len(accountList)+ ncol-1) / ncol # make sure enough subplots
fig, ax = plt.subplots(nrows=nrow, ncols=ncol) # create the axes
for i in xrange(len(accountList)): # go over a linear list of data
ix = np.unravel_index(i, ax.shape) # compute an appropriate index (1d or 2d)
accountList[i].plot( ..., ax=ax[ix]) # pandas method plot
ax[ix].plot(...) # or direct axis object method plot (/scatter/bar/...)
您还可以重新调整返回的数组的形状,使其为线性(正如我在this answer中使用的那样):
for a in ax.reshape(-1):
a.plot(...)
如链接解决方案中所述,如果您可能有1X1子批次(然后接收单个轴手柄;
axs = np.array(axs)
就足够了),那么AXS需要进行一些按摩。在更仔细地阅读了docs之后(oops),设置
squeeze=False
forcessubplots
返回一个二维矩阵,而不考虑ncol/nrows的选择。(squeeze
默认为true)。如果您这样做,您可以在两个维度上迭代(如果您的数据是自然的),或者使用上述任何一种方法对数据进行线性迭代,并将二维索引计算到
ax
中。关于python - 将pandas DataFrame.plot填充到matplotlib子图中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21962508/