【问题标题】:Center specified tick labels for matplotlib's pcolomesh at the boxes将 matplotlib pcolormesh 的特定刻度标签居中在框中
【发布时间】:2021-09-03 20:25:36
【问题描述】:

我不明白,如何使用 matplotlib 正确绘制我的热图 (pcolormesh)。我希望刻度线的标签位于相应框下方/旁边的中心 - 并且只有我给定的数据,而不是一些人为扩展的范围。

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()

如何让我的热图简单地将给定的浮点数绘制为居中刻度标签,而没有那些不需要的浮点数?我真的想指定我的刻度标签(浮点数或字符串)以框为中心显示。我认为必须有一种方法可以将列表或数组指定为刻度标签。我该如何做到这一点?

【问题讨论】:

    标签: python matplotlib format data-visualization heatmap


    【解决方案1】:

    绘制pcolormesh 后,您可以分别使用matplotlib.axes.Axes.set_xticksmatplotlib.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)
    

    【讨论】:

    • 非常感谢。事实上,我确实尝试了 ax.set_xticks() 和自制的 np.linspace(),但这对我来说并不奏效。显然我没有测试最方便的方法:D
    猜你喜欢
    • 2013-06-14
    • 2022-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 2014-08-03
    相关资源
    最近更新 更多