我在使用 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)
慕桂英4014372
TA贡献1871条经验 获得超13个赞
文档说aspect
参数可能是浮点数或
'equal':确保纵横比为 1。像素将是方形的(除非使用范围在数据坐标中明确将像素大小设为非方形)。
'auto':轴保持固定并调整纵横比以使数据适合轴。通常,这将导致非方形像素。
所以 1.0 的纵横比就是你要找的。鉴于您根据数组的形状计算出的值,您不会得到上面显示的输出。正如@ImportanceOfBeingErnest 指出的那样aspect='equal'
是默认值,所以它就像
im = ax.imshow(data)
添加回答
举报
0/150
提交
取消