提问人:rdv 提问时间:10/24/2023 最后编辑:tmdavisonrdv 更新时间:10/25/2023 访问量:82
将 PNG 放在轴对象的正上方
place a PNG right above an axes object
问:
我有一个 Matplotlib 图形,有三个轴,彼此重叠。在顶部对象上方,我想放置一个图像,并将其包含在一个“框”中。图像应与对象一样宽(与原始比例相比,其高度应相应缩放),并且应无缝连接到对象的顶部(因此图像底部和对象顶部之间没有空白)。像这样(黑框是对象,红框是图像):axes
inset_axes()
axes
axes
axes
axes
这是我目前拥有的代码:
fig, axes = plt.subplots(nrows=3, ncols=1, sharex=True)
for i, ax in enumerate(axes):
if i == 0:
img = Image.open(os.path.join(MY_DIR, img_name), formats=["png"]
axin = ax.inset_axes([0.0, ???, 1.0, 1.0])
axin.imshow(img, alpha=1)
axin.axis("off")
根据文档,参数 for 采用四个值:“插入轴的左下角及其宽度和高度”。我发现我可以使用 1.0 作为宽度和高度,这使得图像与 一样宽,保持其比例。x 坐标也很明显:它应该为 0,以便图像的左侧与 x 轴的起点对齐。但是,我无法弄清楚y坐标应该是什么。bounds
inset_axes()
axes
如果我设置为 0,则图像沿对象的 y 轴垂直居中:y
axes
如果我将其设置为 0.5,则其中间与 y 轴的顶部对齐。仍然不是我想要的:
我怎样才能得到我想要的结果?我无法让它变得有意义。有没有办法告诉 matplotlib 图像的底部应该与图像的顶部对齐?axes
(我应该提一下,我在这里问了一个非常相似的问题,但这似乎是一个死胡同。
答:
2赞
RuthC
10/25/2023
#1
设置为 1,因为这是轴的顶部。然后将插入轴设置为“S”(表示南),这样,一旦调整插入轴的大小以考虑纵横比,它仍然连接到主轴的顶部。y
anchor
import numpy as np
import matplotlib.pyplot as plt
img = np.random.random((5, 25))
fig, ax_arr = plt.subplots(3, 1, figsize=(5, 7))
ax_ins = ax_arr[0].inset_axes([0, 1, 1, 1])
ax_ins.imshow(img)
ax_ins.set_anchor("S")
ax_ins.axis("off")
plt.savefig("test.png")
评论
0赞
Tranbi
10/25/2023
确实比计算相对高度简单得多!+1
0赞
rdv
10/25/2023
@RuthC 哇,完美。一行。我知道必须有可能以如此简单的方式做到这一点,但在我的搜索中从未遇到过这一点。谢谢!
评论
0.5 + rel_im_height
rel_im_height