numpy imshow()像素未与网格线精确对齐

eqoofvh9  于 2023-01-26  发布在  其他
关注(0)|答案(1)|浏览(87)

我想在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)数组。
有没有办法使网格和坐标更精确?

1qczuiv0

1qczuiv01#

默认情况下,网格从-0.5开始。您可以通过设置imshow中的extent参数以从0开始网格来修复此问题:

ax.imshow(checkers * 255, interpolation='none', cmap='gray', 
          vmin=0, vmax=255, extent=[0, n, 0, n])```

相关问题