5

气象图

我正在寻找一个具有多个子图的图形,就像 matplotlib 中的这个气象图。我将需要多个不同高度的子图(宽度都相同,但有些会“更瘦”,有些会“更胖”)。就像上图一样,有些子图需要很大,有些需要很小,但是无论有多少子图,它们都需要足够大以传达有用的信息。

当我将子图创建为 pyplot.subplot(2,1,1) 时,它具有我需要的纵横比,但如果我增加行数(例如 subplot(3,1,1)),子图会变得“太瘦” . 我将需要在一个图形上放置六个这样的图,但是如果我开始在图形上放置更多的子图,它们就会变得太“小”。

简而言之,在 matplotlib 中是否有可能在不将多个图像拼接在一起的情况下制作像这样的气象图?这些图像将通过 url 请求从服务器返回,因此从技术上讲这是可能的,但如果我可以在库中解决这个问题,那将是首选。

matplotlib 的文档非常棒,但似乎 matplotlib 已调整为为您提供具有相同纵横比的子图,而不是让您在子图数量增加时提供具有任意纵横比的子图。我在不同子图大小的网络上找不到单个示例。

4

2 回答 2

6

您可以通过在归一化坐标中给它一个边界框(在构造时)来完全控制轴定位。格式为[左、上、宽、高]。

我将如何设置图形的示例:

import matplotlib.pyplot as plt


left = 0.1
width = 0.8

ax1 = plt.axes([left, 0.5, width, 0.45])
ax2 = plt.axes([left, 0.3, width, 0.19])
ax3 = plt.axes([left, 0.2, width, 0.09], sharex=ax2)
ax4 = plt.axes([left, 0.1, width, 0.09], sharex=ax2)

# ticks at the top of the top plot
ax1.xaxis.tick_top()

# remove ticks for ax2 and ax3
ax2.xaxis.set_visible(False)
ax3.xaxis.set_visible(False)

# only put ticks on the bottom of ax4
ax4.xaxis.tick_bottom()

plt.show()

我添加了一些您可能会觉得有用的功能(删除顶部刻度、共享 xaxis、将刻度移动到轴的顶部)。

结果:

示例输出

高温高压

于 2012-11-22T11:46:26.127 回答
3

您可以使用Gridspecsubplot2grid。我发现后者使用起来更自然,但这是个人喜好。此外,佩尔森的回答是另一种方法。

看看这个例子中最底层的两个代码块。

于 2012-11-22T11:51:41.840 回答