我想创建一个图形,其中在For循环中动态添加子图。应该有可能以厘米为单位定义每个子图的宽度和高度,也就是说,添加的子图越多,数字就越大,以便为“传入”子图腾出空间。
在我的情况下,应按行添加子图,以使图形必须在y维上变大。我遇到了这个stackoverflow post,它可能会朝着正确的方向前进?也许gridspec module可以解决这个问题吗?
我尝试了第一篇文章中描述的代码,但这不能解决我的问题(它设置了最终的图形尺寸,但是添加到图形中的子图越多,每个子图所获得的空间就越小,如下所示)示例):
import matplotlib.pyplot as plt
# set number of plots
n_subplots = 2
def set_size(w,h,ax=None):
""" w, h: width, height in inches """
if not ax: ax=plt.gca()
l = ax.figure.subplotpars.left
r = ax.figure.subplotpars.right
t = ax.figure.subplotpars.top
b = ax.figure.subplotpars.bottom
figw = float(w)/(r-l)
figh = float(h)/(t-b)
ax.figure.set_size_inches(figw, figh)
fig = plt.figure()
for idx in range(0,n_subplots):
ax = fig.add_subplot(n_subplots,1,idx+1)
ax.plot([1,3,2])
set_size(5,5,ax=ax)
plt.show()
答案 0 :(得分:0)
您要设置相同的图形尺寸(5,5),而不管子图的数量如何。如果我正确理解了您的问题,我认为您希望将高度设置为与子图的数量成比例。
但是,最好还是从一开始就以合适的尺寸创建图形。您提供的代码只能提供正确的布局,因为您事先知道要创建多少个子图(在fig.add_subplot(n_subplots,...)
中)。如果您在不知道所需子图行总数的情况下尝试添加子图,则问题会更加复杂。
n_subplots = 4
ax_w = 5
ax_h = 5
dpi = 100
fig = plt.figure(figsize=(ax_w, ax_h), dpi=dpi)
for idx in range(0,n_subplots):
ax = fig.add_subplot(n_subplots,1,idx+1)
ax.plot([1,3,2])
fig.set_size_inches(ax_w,ax_h*n_subplots)
fig.tight_layout()