如何使图像和散点图具有相同的高度?

时间:2015-09-07 08:45:40

标签: python matplotlib

我正在绘制两个不同的子图。一个是图像,另一个是散点图。

fig = plt.figure(figsize=(16, 8))

# here I am drawing a greyscale image
image = img.imread(file_name)
fig.add_subplot(1, 2, 1).imshow(image, cmap=cm.Greys_r)
fig.tight_layout()
plt.axis('off')

# and here I am drawing a scatterplot based on this image.
X, Y = image.shape
x, y = np.nonzero(image)
fig.add_subplot(1, 2, 2).scatter(y - Y, -x)
fig.tight_layout()

问题在于,当我画画时,它们的高度不同。我怎样才能使高度相同? enter image description here

寻找设置高度matplotlib不会给出合适的结果。

2 个答案:

答案 0 :(得分:2)

您需要在aspect='auto'电话中添加关键字imshow。所以看起来应该是这样的:

fig.add_subplot(1, 2, 1).imshow(image, cmap=cm.Greys_r, aspect='auto')

来自文档:

  

方面:['auto'| '相等'|标量],可选,默认值:无

     

如果是“自动”,则更改图像宽高比以匹配轴的宽高比。

     

如果“相等”且范围为“无”,则更改轴纵横比以匹配图像的纵横比。如果extent不是None,则更改轴纵横比以匹配范围。

     

如果为None,则默认为rc image.aspect value。

答案 1 :(得分:1)

以及@ jure关于设置aspect的答案(您可能还想尝试equal而不是auto,因为auto不保证这两个地块会看起来一样),您还需要确保两个子图之间的xlimylim相同,因为它目前看起来像xy imshow中的范围远远超出散点图的范围。

此外,在变换y和x坐标时,需要将范围设置为-X, 0-Y, 0

试试这个:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.image as img
import matplotlib.cm as cm


fig = plt.figure(figsize=(16, 8))

# here I am drawing a greyscale image
image = img.imread(filename)
ax1=fig.add_subplot(1, 2, 1, aspect='equal')
ax1.imshow(image, cmap=cm.Greys_r)
fig.tight_layout()
plt.axis('off')

# and here I am drawing a scatterplot based on this image.
X, Y = image.shape
x, y = np.nonzero(image)
ax2=fig.add_subplot(1, 2, 2, aspect='equal')
ax2.scatter(y - Y, -x, s=1, linewidths=0)
ax2.set_xlim(-Y, 0)
ax2.set_ylim(-X, 0)
fig.tight_layout()

plt.show()

enter image description here