Imshow:范围和方面
我正在编写一个软件系统,通过3D数据集可视化切片和投影。 我正在使用matplotlib
,特别是imshow
来显示我从分析代码中得到的图像缓冲区。
由于我想使用绘图轴标注图像,因此我使用imshow
提供的extent关键字将图像缓冲区像素坐标映射到数据空间坐标系。
不幸的是, matplotlib
不知道单位。 说(以一个人为的例子),我想绘制一个尺寸为1000 m X 1 km
的图像。 在这种情况下,范围将是[0, 1000, 0, 1]
。 即使图像数组是正方形的,由于extent关键字隐含的宽高比为1000,所得的绘图轴也具有1000的宽高比。
是否可以强制的情节的纵横比,同时仍然保持自动生成的主要刻度和标签,我得到了使用关键字?
您可以通过手动设置图像的方面(或通过自动缩放来填充图的范围)来完成。
默认情况下, imshow
将图的方面设置为1,因为这通常是人们想要的图像数据。
在你的情况下,你可以做一些事情:
import matplotlib.pyplot as plt import numpy as np grid = np.random.random((10,10)) fig, (ax1, ax2, ax3) = plt.subplots(nrows=3, figsize=(6,10)) ax1.imshow(grid, extent=[0,100,0,1]) ax1.set_title('Default') ax2.imshow(grid, extent=[0,100,0,1], aspect='auto') ax2.set_title('Auto-scaled Aspect') ax3.imshow(grid, extent=[0,100,0,1], aspect=100) ax3.set_title('Manually Set Aspect') plt.tight_layout() plt.show()