我用过pyplot.imshow公司很多次,但我以前在用imshow绘制数值网格时从未遇到过这个问题。当打印一个小图像时,将刻度/标签调整为位于每个像素边缘的中心,生成的图像将切掉像素的顶行和底行的一半。在
理想情况下,我会有记号和标签在每个像素的边缘居中,所有像素都将以完整、方形的大小显示,而不会被截断。在
我在运行一个Jupyter笔记本,上面有一个工作示例:
%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1,2)
ax[0].imshow(np.arange(9).reshape((3,3)))
ax[0].set(xticks=np.arange(3),
xticklabels=['D', 'E', 'F'], yticklabels=['', 'A', '', 'B', '', 'C' ''])
ax[0].set_title('Pixels with undesirable ticks')
im1 = ax[1].imshow(np.arange(9).reshape((3,3)))
ax[1].set(xticks=np.arange(3), yticks=np.arange(3),
xticklabels=['D', 'E', 'F'], yticklabels=['A', 'B', 'C'])
ax[1].set_title('Cut off pixels with desired ticks')
plt.show()
这将生成以下图像,其中我希望完整图像如左侧所示,但标记和标签以每个像素为中心,如右侧所示:
(编辑) 再进行一些测试后,我可以通过在调用imshow中包含extent参数来解决问题:
^{pr2}$或者通过显式设置范围:
im1.set_extent([-0.5, 2.5, -0.5, 2.5])
所以。。。为什么默认范围没有显示为方形?在
目前没有回答
相关问题 更多 >
编程相关推荐