我的大脑疼
我有一些代码可以在一个长列中生成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=Falseforcessubplots返回一个二维矩阵,而不考虑ncol/nrows的选择。(squeeze默认为true)。
如果您这样做,您可以在两个维度上迭代(如果您的数据是自然的),或者使用上述任何一种方法对数据进行线性迭代,并将二维索引计算到ax中。

关于python - 将pandas DataFrame.plot填充到matplotlib子图中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21962508/

10-12 20:14