for 循环中的子图
Subplots within for loops
我想从循环中将四个文件图放入 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
先制作图形和子图;遍历文件和轴;在 current 轴上绘制文件中的数据。这是一个显示过程的玩具示例。
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()
returns 一张图和一组子图 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')
我想从循环中将四个文件图放入 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
先制作图形和子图;遍历文件和轴;在 current 轴上绘制文件中的数据。这是一个显示过程的玩具示例。
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()
returns 一张图和一组子图 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')