网格单元和用于突出显示它们的颜色网格之间的错位(在 Matplotlib 中)
misalignment between grid cells and color mesh used to highlight them (in Matplotlib)
我正在使用以下代码生成此热图:
dim = np.arange(1, 32, 1)
fig, ax = plt.subplots(figsize=(7,9))
heatmap = ax.imshow(h, aspect=1, cmap=plt.cm.get_cmap('Blues', 5), clim=[0,100])
ax.set_ylabel("Days", fontsize=15)
ax.set_xlabel("Months", fontsize=15)
ax.set_title("Percentage of records per day", fontsize=18)
ax.set_yticks(range(0,31))
ax.set_yticklabels(dim, ha='center', minor=False)
ax.set_xticks(range(0,13,1))
ax.set_xticklabels(ylabel[7:],rotation=45, ha='right')
ax.grid(which = 'minor', color = 'w')
ax.set_facecolor('gray')
ax.xaxis.set_minor_locator(MultipleLocator(.5))
ax.yaxis.set_minor_locator(MultipleLocator(.5))
cbaxes = fig.add_axes([.8, .35, .04, .3])
cbar = fig.colorbar(heatmap, ticks = [0, 20, 40, 60, 80 ,100], label = 'Percentage', cax = cbaxes)
fig.show()
我想突出显示值大于或等于 60 的所有单元格。
我尝试将此添加到我的代码中:
highlight = (h> 60)
highlight = np.ma.masked_less(highlight, 1)
ax.pcolormesh(highlight, facecolor = 'None')
得到这个:
我快到了,但单元格和网格未对齐。我该如何解决这个问题?
热图中的单元格以整数为中心,这意味着例如索引为 0,0 的单元格实际上在两个轴上都是 -0.5 到 0.5。您必须将高光坐标减去 0.5。
感谢 mozway 的评论,我得以解决我的问题。我将代码的开头更改为:
highlight = (h> 60)
highlight = np.ma.masked_less(highlight, 1)
x = np.arange(-0.5,12,1) # len = 10
y = np.arange(-0.5,30,1) # len = 6
X, Y = np.meshgrid(x, y)
并将绘制颜色网格的线更改为:
ax.pcolormesh(x,y,highlight, facecolor = 'None', edgecolors = 'w',shading='auto', zorder=2)
我还必须将颜色网格的 z 顺序设置为大于网格线(分别为 zorder=2 和 zorder=1)。
我正在使用以下代码生成此热图:
dim = np.arange(1, 32, 1)
fig, ax = plt.subplots(figsize=(7,9))
heatmap = ax.imshow(h, aspect=1, cmap=plt.cm.get_cmap('Blues', 5), clim=[0,100])
ax.set_ylabel("Days", fontsize=15)
ax.set_xlabel("Months", fontsize=15)
ax.set_title("Percentage of records per day", fontsize=18)
ax.set_yticks(range(0,31))
ax.set_yticklabels(dim, ha='center', minor=False)
ax.set_xticks(range(0,13,1))
ax.set_xticklabels(ylabel[7:],rotation=45, ha='right')
ax.grid(which = 'minor', color = 'w')
ax.set_facecolor('gray')
ax.xaxis.set_minor_locator(MultipleLocator(.5))
ax.yaxis.set_minor_locator(MultipleLocator(.5))
cbaxes = fig.add_axes([.8, .35, .04, .3])
cbar = fig.colorbar(heatmap, ticks = [0, 20, 40, 60, 80 ,100], label = 'Percentage', cax = cbaxes)
fig.show()
我想突出显示值大于或等于 60 的所有单元格。 我尝试将此添加到我的代码中:
highlight = (h> 60)
highlight = np.ma.masked_less(highlight, 1)
ax.pcolormesh(highlight, facecolor = 'None')
得到这个:
我快到了,但单元格和网格未对齐。我该如何解决这个问题?
热图中的单元格以整数为中心,这意味着例如索引为 0,0 的单元格实际上在两个轴上都是 -0.5 到 0.5。您必须将高光坐标减去 0.5。
感谢 mozway 的评论,我得以解决我的问题。我将代码的开头更改为:
highlight = (h> 60)
highlight = np.ma.masked_less(highlight, 1)
x = np.arange(-0.5,12,1) # len = 10
y = np.arange(-0.5,30,1) # len = 6
X, Y = np.meshgrid(x, y)
并将绘制颜色网格的线更改为:
ax.pcolormesh(x,y,highlight, facecolor = 'None', edgecolors = 'w',shading='auto', zorder=2)
我还必须将颜色网格的 z 顺序设置为大于网格线(分别为 zorder=2 和 zorder=1)。