设置纵横比时,Pyplot imshow 不显示方形像素

我在使用 Pyplotimshow从 numpy 绘制图像时遇到了一些麻烦,ndarray称为data保持其纵横比和方形像素。的形状ndarray是(112, 2182)。这是我正在使用的代码:


import matplotlib as mpl

from mpl_toolkits.axes_grid1 import make_axes_locatable

import numpy as np


mpl.use('Agg')


import matplotlib.pyplot as plt


data = np.random.random_sample((112, 2182))

plt.figure(figsize=(25, 3.5))

plt.subplots_adjust(left=0.1, right=0.9)


ax = plt.subplot(111)

plt.axis('off')

plt.title('Title', fontweight='bold', y=1.15)


im = ax.imshow(data)


# Add same-width colorbar to the bottom of the image

divider = make_axes_locatable(ax)

cax = divider.append_axes("bottom", size="25%", pad=0.3)

cbar = plt.colorbar(im, orientation="horizontal", cax=cax)


# Save image

plt.savefig('image.pdf', dpi=1000, format=pdf)

我认为通过使用ndarray图像的形状设置方面会显示方形像素。但是,图像似乎保持纵横比但像素不是正方形,正如您在放大图像中看到的那样(我仍然无法发布图像,抱歉):

http://img4.mukewang.com/6165388800017f0c03290578.jpg

http://img4.mukewang.com/61653893000199e925570133.jpg

这些输出,当我用我得到了相同的im = ax.imshow(data)withouth的的aspect说法。我手动计算了整个图的 y 轴上的像素,其中有 112 个,因此这不是像素分组的问题。关于如何解决这个问题的任何想法?

编辑:我正在绘制的图像也将有一个颜色条和一个标题。此外,我需要能够将其保存为 pdf 文件。我上传的缩放图是在 pdf 查看器中放大的图的屏幕截图。


杨魅力
浏览 262回答 3
3回答

米琪卡哇伊

如果您使用,ax.imshow(data)您将自动获得方形像素。相反,如果您将方面设置为1/以外的其他内容"equal",那么您将不会获得方形像素。然而,这与问题中观察到的效果无关。“缩放图像”中的问题是数据像素的大小是实际屏幕像素的数量级。因此,图像像素的大小可能与屏幕像素一样大。解决这个问题的方法是保存在一个图形上,这样一个图像像素就是一个屏幕像素,或者它的任意倍数。在这种情况下,这将很简单data = np.random.random_sample((2182, 112))plt.imsave("filename.png", data)

慕桂英4014372

文档说aspect参数可能是浮点数或'equal':确保纵横比为 1。像素将是方形的(除非使用范围在数据坐标中明确将像素大小设为非方形)。'auto':轴保持固定并调整纵横比以使数据适合轴。通常,这将导致非方形像素。所以 1.0 的纵横比就是你要找的。鉴于您根据数组的形状计算出的值,您不会得到上面显示的输出。正如@ImportanceOfBeingErnest 指出的那样aspect='equal'是默认值,所以它就像im = ax.imshow(data)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python