python - 在 matplotlib 中创建具有不同形状的子图

标签 python matplotlib subplot

meteogram

我希望创建一个具有多个子图的图形,就像 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 轴、将刻度移动到轴的顶部)。

结果:

Example output

HTH

关于python - 在 matplotlib 中创建具有不同形状的子图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13507315/

相关文章:

python - 为 pandas.io.json_normalize 提供默认值

Python索引二维数组

python - 遍历枚举返回括号中的字符串

python - 如何将 (*args,**kwargs) 类型的属性传递给类内的函数?

python - 如何扩展 python 模块以包含额外的功能? (sqlite3)

3d - 如何使用 matplotlib 将 3d 数据单位转换为显示单位?

python - 将 pandas 数据框的 3 列绘制为热图

python - 如何在 matplotlib/basemap 中绘制多个 x,y 点之间的线

python - 使用 plt.subplot2grid() 时如何减少 basemap 子图之间的空白空间

python - 使用matplotlib subplot排列饼图