我有一个包含三个子图的图。第一个子图是一个图像(imshow
),而另外两个是分布(plot
)。
以下是代码:
# collects data
imgdata = ... # img of shape (800, 1600, 3)
x = ... # one 1600-dimensional vector
y = ... # one 800-dimensional vector
# create the figure
f = plt.figure()
# create subplots
subplot_dim = (1, 3)
p_img = plt.subplot2grid(subplot_dim, (0, 0), aspect="auto")
p_x = plt.subplot2grid(subplot_dim, (0, 1), aspect="auto")
p_y = plt.subplot2grid(subplot_dim, (0, 2), aspect="auto")
p_img.imshow(imgdata, interpolation="None")
p_x.plot(x)
p_y.plot(y)
# save figure
f.set_size_inches(21.0, 12.0)
f.savefig("some/path/image.pdf", dpi=80)
我的问题是,两个子图p_x
,p_y
始终的高度高于图像子图p_img
。
因此,结果总是如下:
############### ###############
# # # ***** #
# *****# # * * #
############### # *** # # * * #
# # # * # # * * #
# image # # * # #* *#
# # #*** # #* *#
############### ############### ###############
p_img p_x p_y
如何强制执行p_img
,p_x
和p_y
等同(或至少身高)?< / p>
编辑:这是一个简单示例代码,可生成随机数据并使用plt.show()
代替保存数字。但是,人们可以很容易地看到相同的行为:图像比其他子图小得多(高度):
from matplotlib import pyplot as plt
from matplotlib import image as mpimg
import numpy as np
imgdata = np.random.rand(200, 400, 3)
x = np.random.normal(loc=100.0, scale=20.0, size=400)
y = np.random.normal(loc=150.0, scale=15.0, size=200)
# create the figure
f = plt.figure()
# create subplots
subplot_dim = (1, 3)
p_img = plt.subplot2grid(subplot_dim, (0, 0), aspect="auto")
p_x = plt.subplot2grid(subplot_dim, (0, 1), aspect="auto")
p_y = plt.subplot2grid(subplot_dim, (0, 2), aspect="auto")
p_img.imshow(imgdata, interpolation="None")
p_x.plot(x)
p_y.plot(y)
# save figure
plt.show()
答案 0 :(得分:2)
您可以直接在子图中指定它,如下所示:
from matplotlib import pyplot as plt
from matplotlib import image as mpimg
import numpy as np
imgdata = np.random.rand(200, 400, 3)
x = np.random.normal(loc=100.0, scale=20.0, size=400)
y = np.random.normal(loc=150.0, scale=15.0, size=200)
# create the figure
f = plt.figure()
# create subplots
subplot_dim = (1, 3)
p_img = plt.subplot2grid(subplot_dim, (0, 0), aspect="auto")
p_x = plt.subplot2grid(subplot_dim, (0, 1), aspect="auto", adjustable='box-forced', sharex=p_img, sharey=p_img)
p_y = plt.subplot2grid(subplot_dim, (0, 2), aspect="auto", adjustable='box-forced', sharex=p_img, sharey=p_img)
p_img.imshow(imgdata, interpolation="None")
p_x.plot(x)
p_y.plot(y)
,结果如下:
问题是您的数据没有相同的限制。因此,您必须使用set_xlim
和set_ylim
进行调整。我还建议测试sharey
的其他组合,因为它们可能会提供更好的结果。