向pyplot动态添加列不起作用

2024-09-28 22:29:23 发布

您现在位置:Python中文网/ 问答频道 /正文

这不是一个紧迫的问题,但它困扰着我:我想并排显示几个图像(即几列),但出于某种原因,下面的代码(取自python tutorial)只显示一列中的图像。所以我想要的是这样的布局

X X X 

但我得到的是

X
X
X

代码:

...
plt.ion() 
...
fig = plt.figure()
sample = face_dataset[65]       # <== this is a simple image of size 640x480
for i, tsfrm in enumerate([scale, crop, composed]):
    transformed_sample = tsfrm(sample)

    ax = plt.subplot(1, 3, i + 1)
    plt.tight_layout()
    ax.set_title(type(tsfrm).__name__)
    show_landmarks(**transformed_sample)
plt.show()
...

以下是show_landmarks函数定义:

def show_landmarks(image, landmarks):
    """Show image with landmarks"""
    plt.imshow(image)
    plt.scatter(landmarks[:, 0], landmarks[:, 1], s=10, marker='.', c='r')
    plt.pause(0.001)  # pause a bit so that plots are updated

我不认为不同的变换(缩放、裁剪、合成)有什么关系,所以我省略了它们,但它们可以在上面的链接下找到

如果我编写的代码与测试代码基本相同,则列显示得很好:

fig = plt.figure()
for i in (0,1,2):
    ax = plt.subplot(1, 3, i + 1)
    plt.tight_layout()
    ax.set_title(i)
plt.show()

所以我的猜测是,地标会把事情搞砸。有人能告诉我为什么会这样吗


Tags: sample代码in图像imageforshowfig
1条回答
网友
1楼 · 发布于 2024-09-28 22:29:23

您需要修改show_landmarks,以便它调用当前打印轴,而不是plt。然后将轴传递给函数以及其他参数

def show_landmarks(ax, image, landmarks):
    """Show image with landmarks"""
    ax.imshow(image)
    ax.scatter(landmarks[:, 0], landmarks[:, 1], s=10, marker='.', c='r')

...
for i, tsfrm in enumerate([scale, crop, composed]):
    transformed_sample = tsfrm(sample)

    ax = plt.subplot(1, 3, i + 1)
    ax.set_title(type(tsfrm).__name__)
    show_landmarks(ax, **transformed_sample)

plt.tight_layout()
...

相关问题 更多 >