我的 matplot 的网格偏移了 -0.5
my matplot's Grid is off by -0.5
我正在尝试使用 matplotlib 库将颜色映射应用于二维数组 python 3. 为简单起见,我制作了一个示例代码来说明我的问题:
示例代码:
from matplotlib import pyplot as plt
from matplotlib import colors
import numpy as np
#just an example array
sample= np.zeros((20,20),dtype=int)
sample[2,2]=sample[4,4]=2
#color-table and color bounds
cmap = colors.ListedColormap(['black','white','red','green'])
bounds=[-6,0,1,99,105]
norm = colors.BoundaryNorm(bounds, cmap.N)
fig, ax = plt.subplots()
ax.imshow(sample,interpolation='nearest', cmap=cmap, norm=norm)
ax.grid(which='major', axis='both', linestyle='-', color='k', linewidth=2)
ax.set_xlim(0, 20)
ax.set_ylim(20, 0)
ax.set_xticks(np.arange(0,20,1))
ax.set_yticks(np.arange(0,20,1))
plt.show()
使用此代码,我有一个 20 x 20 的网格,除了 [2,2]
和 [4,4]
两个应该是红色的单元格外,其他地方都是白色的。问题是当我显示我的网格时,单元格在两个方向上都偏移了 -0.5。我从这个示例代码中得到的是:
如果我将网格移动 -0.5:
ax.set_xticks(np.arange(-0.5,20,1))
ax.set_yticks(np.arange(-0.5,20,1))
然后我的单元格看起来是正确的,现在网格全错了!
我的代码有什么问题?我真的不明白这怎么会发生?!!
ax.imshow
的文档字符串的 Notes 部分说:
Unless extent is used, pixel centers will be located at integer
coordinates. In other words: the origin will coincide with the center
of pixel (0, 0).
所以你的电话变成:
ax.imshow(sample, interpolation='none', cmap=cmap, norm=norm,
extent=[0, 20, 20, 0])
我正在尝试使用 matplotlib 库将颜色映射应用于二维数组 python 3. 为简单起见,我制作了一个示例代码来说明我的问题:
示例代码:
from matplotlib import pyplot as plt
from matplotlib import colors
import numpy as np
#just an example array
sample= np.zeros((20,20),dtype=int)
sample[2,2]=sample[4,4]=2
#color-table and color bounds
cmap = colors.ListedColormap(['black','white','red','green'])
bounds=[-6,0,1,99,105]
norm = colors.BoundaryNorm(bounds, cmap.N)
fig, ax = plt.subplots()
ax.imshow(sample,interpolation='nearest', cmap=cmap, norm=norm)
ax.grid(which='major', axis='both', linestyle='-', color='k', linewidth=2)
ax.set_xlim(0, 20)
ax.set_ylim(20, 0)
ax.set_xticks(np.arange(0,20,1))
ax.set_yticks(np.arange(0,20,1))
plt.show()
使用此代码,我有一个 20 x 20 的网格,除了 [2,2]
和 [4,4]
两个应该是红色的单元格外,其他地方都是白色的。问题是当我显示我的网格时,单元格在两个方向上都偏移了 -0.5。我从这个示例代码中得到的是:
如果我将网格移动 -0.5:
ax.set_xticks(np.arange(-0.5,20,1))
ax.set_yticks(np.arange(-0.5,20,1))
然后我的单元格看起来是正确的,现在网格全错了!
我的代码有什么问题?我真的不明白这怎么会发生?!!
ax.imshow
的文档字符串的 Notes 部分说:
Unless extent is used, pixel centers will be located at integer coordinates. In other words: the origin will coincide with the center of pixel (0, 0).
所以你的电话变成:
ax.imshow(sample, interpolation='none', cmap=cmap, norm=norm,
extent=[0, 20, 20, 0])