我无法遍历每个子图.我到达子图的坐标,然后想要在每个子图上显示不同的模型.但是,我当前的解决方案遍历所有子图,但每个子图遍历所有模型,最后一个模型在每个子图上绘制,这意味着它们看起来都是一样的.
我的目标是在每个子图上放置一个模型.请帮忙!
modelInfo = csv_info(filename) # obtains information from csv file
f, axarr = plt.subplots(4, 6)
for i in range(4):
for j in range(6):
for model in modelInfo:
lat = dictionary[str(model) + "lat"]
lon = dictionary[str(model) + "lon"]
lat2 = dictionary[str(model) + "lat2"]
lon2 = dictionary[str(model) + "lon2"]
axarr[i, j].plot(lon, lat, marker = 'o', color = 'blue')
axarr[i, j].plot(lon2, lat2, marker = '.', color = 'red')
axarr[i, j].set_title(model)
解决方法:
您可以将模型和轴压缩在一起并同时循环.但是,因为您的子图是一个二维数组,所以首先必须“线性化”其元素.您可以通过对numpy数组使用reshape方法轻松完成此操作.如果为该方法赋值-1,它将把数组转换为1d向量.由于缺少输入数据,我使用numpy中的数学函数做了一个例子.有趣的getattr线只在那里,所以我很容易添加标题:
from matplotlib import pyplot as plt
import numpy as np
modelInfo = ['sin', 'cos', 'tan', 'exp', 'log', 'sqrt']
f, axarr = plt.subplots(2,3)
x = np.linspace(0,1,100)
for model, ax in zip(modelInfo, axarr.reshape(-1)):
func = getattr(np, model)
ax.plot(x,func(x))
ax.set_title(model)
f.tight_layout()
plt.show()
请注意,如果您的模型数量超过可用子图的数量,则将忽略多余的模型而不显示错误消息.
希望这可以帮助.