我试图绘制一个数值矩阵,并希望添加网格线以使数值之间的边界更清晰。不幸的是,imshow决定将刻度线定位在每个体素的中间。是否可以
a)去除扁虱,但将标签留在相同位置,以及
B)在像素边界之间添加网格线?
import matplotlib.pyplot as plt
import numpy as np
im = plt.imshow(np.reshape(np.random.rand(100), newshape=(10,10)),
interpolation='none', vmin=0, vmax=1, aspect='equal');
ax = plt.gca();
ax.set_xticks(np.arange(0, 10, 1));
ax.set_yticks(np.arange(0, 10, 1));
ax.set_xticklabels(np.arange(1, 11, 1));
ax.set_yticklabels(np.arange(1, 11, 1));
没有网格线且刻度线位于错误位置
的图像
ax.grid(color='w', linestyle='-', linewidth=2)
网格线位置错误的图像:
5条答案
按热度按时间e0bqpujr1#
Serenity建议的解决方案代码:
生成的图像:
brc7rcf02#
尝试移动轴刻度:
ozxc1zmp3#
您会发现使用
plt.pcolor
或plt.pcolormesh
更容易:不过,它们和
plt.imshow
之间也有一些不同,最明显的是图像被Y轴交换了(不过你可以通过添加ax.invert_yaxis()
轻松地将其反转回来)。When to use imshow over pcolormesh?0aydgbwb4#
通过将
extent
参数传递给imshow
,可以移动像素。extent
是一个4元素的标量列表(左、右、下、上):ih99xse15#
这是一种黑客,但我喜欢使用它,因为它不需要我移动xticks或yticks。