【发布时间】:2019-04-30 11:57:56
【问题描述】:
有几个相关问题(here、here 和 here),但建议的解决方案不适用于我的情况。
我正在迭代地创建子图,所以我不提前知道每个子图的宽度(在调用 plt.subplots() 之后计算),这意味着我无法设置每个子图的大小当我最初创建它们时。 我想在创建子图 x 轴后设置它的大小。
想象一下:
items = [A,B,C] #this could have any number of items in it
f,ax = plt.subplots(len(items),1, figsize=(10,10)) #figsize is arbitrary and could be anything
for i in range(len(items)):
#calculate x and y data for current item
#calculate width of x axis for current item
plt.sca(ax[i])
cax = plt.gca()
cax.plot(x,y)
#here is where I would like to set the x axis size
#something like cax.set_xlim(), but for the size, not the limit
注意 1:单位无关紧要,但相对大小很重要,因此它可以是像素大小或厘米,甚至是基于相对宽度计算的比率。
注意 2:在这种情况下,x 轴的宽度与 x 限制无关,所以我不能只设置 x 限制并期望轴正确缩放。
另外,我试图保持这段代码简短,因为它是与不熟悉 Python 的人共享的,所以如果唯一的解决方案涉及添加一堆行,那是不值得的,我会忍受不正确的缩放轴。这是一种审美偏好,但不是要求。 谢谢!
【问题讨论】:
-
你说的是子图的相对大小还是绝对大小?
-
没关系 - 我想要的是让它们相对于彼此适当缩放(它们是地质横截面,所以 x 轴大小基于点 A 和地图上横截面的 B 点),但如果最简单的方法是为每个人固定一个绝对大小,那也可以。
-
相对尺寸很简单,如@Felix 的回答所示。
-
你看到我的回复了吗?这种方法似乎需要提前知道每个子图的相对大小。我的问题是,直到我已经进入循环之后,我才知道尺寸应该是多少。我是否误解了答案中的某些内容?
-
答案设置
height_ratios在绘图之后。所以到那时你就会知道他们需要什么。
标签: python matplotlib scaling subplot axes