我希望创建一个具有多个子图的图形,就像 matplotlib 中的气象图一样。我将需要多个不同高度的子图(所有宽度相同,但有些会“更瘦”,有些会“更胖”)。就像上图一样,有的子图要大,有的要小,但不管有多少子图,都需要大到能够传达有用的信息。
当我将子图创建为 pyplot.subplot(2,1,1) 时,它具有我需要的纵横比,但如果我增加行数(例如子图(3,1,1)),则子图变为“太瘦”。我将需要在一个图中放置六个这样的图,但如果我开始在图上放置更多子图,它们就会变得太“小”。
简单地说,在 matplotlib 中是否可以在不拼接多个图像的情况下像这样的气象图?这些图像将通过 url 请求从服务器返回,所以从技术上讲这是可能的,但如果我能在库中解决这个问题,那将是首选。
matplotlib 的文档非常棒,但 matplotlib 似乎经过调整可以为您提供具有相同纵横比的子图,而不是让您随着子图数量的增加提供具有任意纵横比的子图。我在不同子图大小的网上找不到一个例子。
最佳答案
您可以通过在归一化坐标(构造时)中为其提供边界框来完全控制轴定位。格式为 [left, top, width, height]。
我将如何设置图形的示例:
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()
我添加了一些您可能会觉得有用的功能(删除顶部刻度、共享 x 轴、将刻度移动到轴的顶部)。
结果:
HTH
关于python - 在 matplotlib 中创建具有不同形状的子图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13507315/