在方框处将 matplotlib pcolormesh 的特定刻度标签居中
Center specified tick labels for matplotlib's pcolomesh at the boxes
我不明白,如何使用 matplotlib 正确绘制我的热图 (pcolormesh
)。我希望刻度的标签居中 below/beside 相应的框 - 只有我给定的数据,而不是一些人为扩展的范围。
在 docs 中,我找到了一个示例,它稍微修改为适合我的浮点数。
Z = []
for i in range(1, 7):
Z.append([j*i for j in range(1, 11)])
Z = np.asarray(Z)
x = np.linspace(0.1, 1.0, num=10)
y = np.linspace(0.1, 0.6, num=6)
fig, ax = plt.subplots()
ax.pcolormesh(x, y, Z, vmin=np.min(Z), edgecolors='w', linewidths=0.5, vmax=np.max(Z), shading='auto')
plt.show()
结果打印出以方框为中心的刻度线,这正是我想要的。
但是一旦我使用自己的数据,它就会出现一些奇怪的行为
data = pd.DataFrame(index=[0, 0.25, 0.5], data={0: [31.40455938, 101.43291831, 101.67128077], 0.25: [31.40455938, 89.81448724, 99.65066293], 0.5: [31.40455938, 57.01406046, 101.47536496]})
x = data.columns.astype(np.float64).to_numpy()
y = data.index.astype(np.float64).to_numpy()
z = data.to_numpy()
cmap = LinearSegmentedColormap.from_list('G2R', ["green", "red"])
fig, ax = plt.subplots()
ax.pcolormesh(x, y, z, shading='auto', cmap=cmap, edgecolors='w', linewidths=0.5, vmin=0, vmax=100) # shading='gouraud'
ax.set_title('not what i want')
ax.set_xlabel('X')
ax.set_ylabel('Y')
plt.show()
如何让我的热图简单地将给定的浮点数绘制为居中的刻度标签,而没有那些不需要的浮点数?我真的想指定我的刻度标签(浮点数或字符串)以框为中心显示。我认为必须有一种方法可以将列表或数组指定为刻度标签。我该如何实现?
绘制 pcolormesh
后,您可以分别用 matplotlib.axes.Axes.set_xticks
and matplotlib.axes.Axes.set_yticks
设置 x 和 y 刻度:
ax.pcolormesh(x, y, z, shading='auto', cmap=cmap, edgecolors='w', linewidths=0.5, vmin=0, vmax=100) # shading='gouraud'
ax.set_xticks(data.columns)
ax.set_yticks(data.index)
我不明白,如何使用 matplotlib 正确绘制我的热图 (pcolormesh
)。我希望刻度的标签居中 below/beside 相应的框 - 只有我给定的数据,而不是一些人为扩展的范围。
在 docs 中,我找到了一个示例,它稍微修改为适合我的浮点数。
Z = []
for i in range(1, 7):
Z.append([j*i for j in range(1, 11)])
Z = np.asarray(Z)
x = np.linspace(0.1, 1.0, num=10)
y = np.linspace(0.1, 0.6, num=6)
fig, ax = plt.subplots()
ax.pcolormesh(x, y, Z, vmin=np.min(Z), edgecolors='w', linewidths=0.5, vmax=np.max(Z), shading='auto')
plt.show()
结果打印出以方框为中心的刻度线,这正是我想要的。
但是一旦我使用自己的数据,它就会出现一些奇怪的行为
data = pd.DataFrame(index=[0, 0.25, 0.5], data={0: [31.40455938, 101.43291831, 101.67128077], 0.25: [31.40455938, 89.81448724, 99.65066293], 0.5: [31.40455938, 57.01406046, 101.47536496]})
x = data.columns.astype(np.float64).to_numpy()
y = data.index.astype(np.float64).to_numpy()
z = data.to_numpy()
cmap = LinearSegmentedColormap.from_list('G2R', ["green", "red"])
fig, ax = plt.subplots()
ax.pcolormesh(x, y, z, shading='auto', cmap=cmap, edgecolors='w', linewidths=0.5, vmin=0, vmax=100) # shading='gouraud'
ax.set_title('not what i want')
ax.set_xlabel('X')
ax.set_ylabel('Y')
plt.show()
如何让我的热图简单地将给定的浮点数绘制为居中的刻度标签,而没有那些不需要的浮点数?我真的想指定我的刻度标签(浮点数或字符串)以框为中心显示。我认为必须有一种方法可以将列表或数组指定为刻度标签。我该如何实现?
绘制 pcolormesh
后,您可以分别用 matplotlib.axes.Axes.set_xticks
and matplotlib.axes.Axes.set_yticks
设置 x 和 y 刻度:
ax.pcolormesh(x, y, z, shading='auto', cmap=cmap, edgecolors='w', linewidths=0.5, vmin=0, vmax=100) # shading='gouraud'
ax.set_xticks(data.columns)
ax.set_yticks(data.index)