【问题标题】:Python: Creating multiple plots in one figure with for loopPython:使用 for 循环在一个图中创建多个图
【发布时间】:2015-09-16 04:10:27
【问题描述】:

我尝试使用 matplotlib 创建一个 2 行 3 列的图网格(每个图上都绘制了多个数据)。然而,不管我怎么尝试,最终保存的图只是其中一个情节,其余的都是空白的。我知道另一个是制作的,但它们没有出现在最终图像中。这是我正在尝试的一个基本版本。

注释掉的部分显示了我见过的一些替代方案。

f,axarr = plt.subplots(2,3, sharex='col', sharey='row')

for i,someargs in enumerate(namelist):
    x1,y1,x2,y2 = somefunction(someargs)  #output data
    ax = axarr.flat[i]  #or ax=axarr[row,col]
    ax.plot(x1,y1)
    ax.plot(x2,y2)
plt.savefig("name")
#or f.savefig("name")

我这样做的方式有问题吗?我得到的图像位于http://i.imgur.com/QxYRnPT.png 任何帮助将不胜感激。

【问题讨论】:

  • 请注意,您将坐标轴存储在axarr,然后从axrr 获取当前坐标轴
  • 我修正了错字,谢谢。
  • 您是否检查过len(namelist)6?您的代码在这里有效。
  • 在我的例子中,namelist 的长度为 5,因为我只有 5 个地块。
  • 我添加了我得到的图像。如果它对其他人有用,那么我真的不确定发生了什么。

标签: python numpy matplotlib plot subplot


【解决方案1】:

这是您可以使用循环生成subplots 的方法,您可以隐藏不需要的轴:

import pylab as plt
import numpy as np
fig ,axs=plt.subplots(2,3, sharex='col', sharey='row')
axs[-1,-1].axis('off')
namelist=['a','b','c','d','e']
ax=axs.ravel()
for i,someargs in enumerate(namelist):
    x1,y1,x2,y2 = somefunction(someargs)
    ax[i].plot(x1,y1)
    ax[i].plot(x2,y2)

【讨论】:

    【解决方案2】:

    花了一些时间仔细查看我正在运行的内容后,我发现问题可能出在我用来生成数据的函数以及它如何与循环交互的某个地方。事实上,使用基本的测试数据没有问题。

    那个函数做了很多事情(并且需要并行性),所以很难准确地知道它在做什么。

    我不太确定出了什么问题,但我通过首先存储数据,然后以我发布的方式或与其他答案类似的方式访问/绘制它来解决我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-20
      • 2019-03-07
      • 2021-01-02
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      • 1970-01-01
      • 2019-07-01
      相关资源
      最近更新 更多