【问题标题】:Subplots within for loopsfor 循环中的子图
【发布时间】:2019-09-04 01:46:24
【问题描述】:

我想将四个文件图从一个循环中放入 1 个子图。

我循环了一些文件(四个数据文件)以从中提取某些数据(例如纬度、经度和气溶胶光学深度),这些数据打印正确,表明它已成功循环文件并提取了我需要的内容。当我继续循环并仅绘制结果时,它会绘制四个单独的数字,因为我还没有完成子图。

当我实现一些子图代码时,它做了很多事情,但不是我想要的。我想要 1 个 2 行 2 列显示每个文件的子图,而不是 4 个子图,每个子图只重复 1 个文件。

这是我的精简代码:

for lim in mlims:
   fil= ilfil + innm +'kd00' + jad +'nam'
   ln= Dataset(ilfil)
   longit = vn.variables['longitude'][:]
   latitud = vn.variables['latitude'][:] 
   ## etc .....
   aode       = var1+var2
   aod=np.squeeze(aode[:,2,:,:])

   lons, lats = np.meshgrid(lonitud, latatit)
   x, y = map(lons, lats)

   ii=[0,1,2,3]
   fig, axes = plt.subplots(nrows=4, ncols=4, figsize=(2,5))
   for ax,mon_index,lname in zip(axes.flatten(),ii, mnames):


       axis=np.arange(0+0.025,0.5+0.025,0.025)

       cs = ax.contourf(x,y,aod,axis,cmap='seismic',linewidths=1.)
       cbar = map.colorbar(cs)

       plt.title(AOD)

plt.show()

代码输出如下:1 是文件的图,但我不希望同一个文件在一个子图图中重复,2+ 是图

我希望它输出:

1 1 1 2 - 第一个文件

1 1 1 3 - 秒文件

1 1 1 4 - 第三

1 1 1 5

我想要得到的只是: 2 3 4 5

【问题讨论】:

    标签: python loops for-loop subplot


    【解决方案1】:

    制作先绘制图形和子图;遍历文件和轴;在 当前 轴上绘制文件中的数据。这是一个展示该过程的玩具示例。

    files = [range(3),range(4),range(5),range(6)]
    fig, axarr = plt.subplots(2,2)
    for data, ax in zip(files, axarr.flat):
        # if you are looping over filenames
        # process/extract the data from the file here
        ax.plot(data)
    

    subplots demo from Matplotlib docs

    .subplots() 返回一个图形和一个子图数组Axes

    >>> axarr
    array([[<matplotlib.axes._subplots.AxesSubplot object at 0x000000000D2BA358>,
            <matplotlib.axes._subplots.AxesSubplot object at 0x000000000F3F29B0>],
           [<matplotlib.axes._subplots.AxesSubplot object at 0x000000000F429080>,
            <matplotlib.axes._subplots.AxesSubplot object at 0x000000000F44F710>]],
          dtype=object)
    

    您可以通过将 索引到(?) 数组来选择它们,而不是按顺序遍历轴。

    >>> axarr[0,1]
    
    <matplotlib.axes._subplots.AxesSubplot object at 0x000000000F3F29B0>
    >>>
    

    pyplot 有一个当前坐标轴的概念。调用 .subplot() 方法将使轴 current 然后后续语句将作用于该轴。这是另一种操作个不按顺序排列的子图的方法。

    plt.subplot(rows,cols,1)
    plt.plot(range(10),'r')
    plt.subplot(rows,cols,3)
    plt.plot(range(100),'b')
    plt.subplot(rows,cols,2)
    plt.plot(range(5),'o')
    plt.subplot(rows,cols,4)
    plt.plot(range(5),'g')
    

    【讨论】:

    • 谢谢!我终于明白了,可以继续我的数字了。救生员
    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 2018-07-25
    • 2017-08-21
    • 2019-05-13
    • 1970-01-01
    • 2020-07-23
    • 2015-07-24
    • 2019-06-05
    相关资源
    最近更新 更多