如何使用matplotlib创建子图的大图?

我无法遍历每个子图.我到达子图的坐标,然后想要在每个子图上显示不同的模型.但是,我当前的解决方案遍历所有子图,但每个子图遍历所有模型,最后一个模型在每个子图上绘制,这意味着它们看起来都是一样的.

我的目标是在每个子图上放置一个模型.请帮忙!

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()

结果如下:
如何使用matplotlib创建子图的大图?.

请注意,如果您的模型数量超过可用子图的数量,则将忽略多余的模型而不显示错误消息.

希望这可以帮助.

上一篇:LeetCode 414. 第三大的数-C语言


下一篇:414. Third Maximum Number