我想在imshow()显示的图像上画线段和多边形,问题是坐标与像素精确对齐,我更喜欢最大精度。
我创建了一个具有检查器模式的最小可重复示例,以使问题更容易看到。
import numpy as np
from matplotlib import pyplot as plt
n = 100
checkers = np.zeros((n, n))
checkers[1::2, ::2] = 0.8
checkers[::2, 1::2] = 0.8
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.imshow(checkers * 255, interpolation='none', cmap='gray', vmin=0, vmax=255)
ax.grid(which='both', linewidth= 0.005, color='r')
ax.tick_params(which='both', width=0.1)
plt.setp(ax.spines.values(), linewidth=0.1)
ax.set_xticks(np.arange(0, n+1, 1), fontsize=1)
ax.set_yticks(np.arange(0, n+1, 1), fontsize=1)
ax.tick_params(axis='both', labelsize=1)
plt.savefig("grid_tests.pdf", bbox_inches='tight')
正如你所看到的,网格线在图像的某些区域失去了准确性,我知道我可能会使用pcolormesh来代替,但这不适用于3D(RGB)数组。
有没有办法使网格和坐标更精确?
1条答案
按热度按时间1qczuiv01#
默认情况下,网格从
-0.5
开始。您可以通过设置imshow
中的extent
参数以从0
开始网格来修复此问题: