matplotlib 将PNG放置在轴对象的正上方

qgzx9mmu  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(182)

我有一个Matplotlib图,有三个轴,一个放在另一个上面。在顶部的axes对象上方,我想放置一个图像,我把它放在一个inset_axes() '盒子'中。图像应该和axes对象一样宽(与其原始比例相比,其高度应相应缩放),并且它应该无缝连接到axes对象的顶部(因此图像的底部和axes对象的顶部之间没有空白)。像这样(黑色框是axes对象;红色框是图像):
x1c 0d1x的数据
这是我到目前为止的代码:

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

字符串
根据documentationinset_axes()bounds参数需要四个值:“Inset Axes的左下角,以及它的宽度和高度”。我发现我可以使用1.0作为宽度和高度,这使得图像与axes一样宽,保持其比例。x坐标也很明显:它应该是0,这样图像的左边就和x轴的起点对齐了,但是我不知道y坐标应该是多少。
如果将y设置为0,则图像将沿axes对象的y轴垂直沿着:



如果我将它设置为0.5,那么它的中间与y轴的顶部对齐。仍然不是我想要的:



我怎么才能得到我想要的结果呢?我不能让它有意义。有没有一种方法可以告诉matplotlib图像的底部应该与axes的顶部对齐?
(我应该提到,我问了一个非常类似的问题here,但这似乎是一个死胡同。

9udxz4iz

9udxz4iz1#

y设置为1,因为这是轴的顶部。然后将插入轴的anchor设置为“S”(表示南),这样,一旦调整插入轴的大小以考虑纵横比,它仍然附着在主轴的顶部。

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

字符串


的数据

相关问题