为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

杨魅力 2021-10-12 15:25:37
我在使用 Pyplotimshow从 numpy 绘制图像时遇到了一些麻烦,ndarray称为data保持其纵横比和方形像素。的形状ndarray是(112, 2182)。这是我正在使用的代码:import matplotlib as mplfrom mpl_toolkits.axes_grid1 import make_axes_locatableimport numpy as npmpl.use('Agg')import matplotlib.pyplot as pltdata = 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 imagedivider = make_axes_locatable(ax)cax = divider.append_axes("bottom", size="25%", pad=0.3)cbar = plt.colorbar(im, orientation="horizontal", cax=cax)# Save imageplt.savefig('image.pdf', dpi=1000, format=pdf)我认为通过使用ndarray图像的形状设置方面会显示方形像素。但是,图像似乎保持纵横比但像素不是正方形,正如您在放大图像中看到的那样(我仍然无法发布图像,抱歉):这些输出,当我用我得到了相同的im = ax.imshow(data)withouth的的aspect说法。我手动计算了整个图的 y 轴上的像素,其中有 112 个,因此这不是像素分组的问题。关于如何解决这个问题的任何想法?编辑:我正在绘制的图像也将有一个颜色条和一个标题。此外,我需要能够将其保存为 pdf 文件。我上传的缩放图是在 pdf 查看器中放大的图的屏幕截图。
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

如果您使用,ax.imshow(data)您将自动获得方形像素。相反,如果您将方面设置为1/以外的其他内容"equal",那么您将不会获得方形像素。然而,这与问题中观察到的效果无关。


“缩放图像”中的问题是数据像素的大小是实际屏幕像素的数量级。因此,图像像素的大小可能与屏幕像素一样大。解决这个问题的方法是保存在一个图形上,这样一个图像像素就是一个屏幕像素,或者它的任意倍数。


在这种情况下,这将很简单


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

plt.imsave("filename.png", data)


查看完整回答
反对 回复 2021-10-12
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

文档说aspect参数可能是浮点数或

'equal':确保纵横比为 1。像素将是方形的(除非使用范围在数据坐标中明确将像素大小设为非方形)。

'auto':轴保持固定并调整纵横比以使数据适合轴。通常,这将导致非方形像素。

所以 1.0 的纵横比就是你要找的。鉴于您根据数组的形状计算出的值,您不会得到上面显示的输出。正如@ImportanceOfBeingErnest 指出的那样aspect='equal'是默认值,所以它就像

im = ax.imshow(data)


查看完整回答
反对 回复 2021-10-12
  • 3 回答
  • 0 关注
  • 261 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信