2012-11-22 36 views
5

meteogram创建具有不同形状的次要情节在matplotlib

我期待创建具有多个分支情节很像这个天气图表中matplotlib的人物。我将需要不同高度的多个子图(所有宽度相同,但有些会变得“更瘦”,有些会更“胖”)。就像上面的图片一样,一些子图需要很大,一些子图需要很小,但是无论有多少个子图,它们都必须足够大才能传递有用的信息。

当我创建一个子图为pyplot.subplot(2,1,1)时,它具有我需要的宽高比,但是如果我增加行数(例如子图(3,1,1)),子图就会变成“太瘦”。如果我开始在这个数字上适合更多的子图,我将需要在这个数字上填充这些图中的半打,但它们变得太“小”。

简单地说,就是这样一个像matplotlib这样的数字可能没有拼接在一起的多个图像?这些图像将通过url请求从服务器返回,因此从技术上讲这是可能的,但如果我可以在库中解决这个问题,那将是首选。

matplotlib的文档是非常棒的,但似乎matplotlib被调整为给你具有相同纵横比的子图,而不是随着子图的数量的增加给出具有任意纵横比的子图。我无法在不同的副图尺寸的网上找到一个例子。

+0

我知道这是一个非常古老的问题。但忍不住问这个。您的meteogram脚本是否正常运行?它是否根据GPL授权? –

+0

不幸的是,没有。经常发生在我的经历中,这个项目被废弃了。我重新格式化了这个代码的硬盘,所以它永远丢失了。抱歉。 – user1844160

回答

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

我添加了一些功能,你可能会发现有用(去除顶部蜱,共享x轴,移动到轴的顶部)。

结果:

Example output

HTH

+0

这很好。使用一些辅助代码,可以将一些尺寸参数作为输入,并将布局边界框作为输出返回! – heltonbiker

+0

感谢您的回答。这正是我所期待的。当我测试你的代码时,我也查找了如何保存具有不同纵横比(x和y大小)的图像,并且在这两种技术之间我有我需要的一切。再次感谢。 – user1844160

2

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

查看this example中两个最底部的代码块。

+0

我很欣赏答案。我绝对会考虑这些。 – user1844160