【问题标题】:y axis of heat map not inverting in Python热图的 y 轴在 Python 中不反转
【发布时间】:2016-08-03 20:15:56
【问题描述】:

我正在使用子图生成 4 个热图,并希望 y 轴倒置。我正在使用ax[i].invert_yaxis(),但它似乎不起作用。代码示例如下:

everything = [data_y_axis, data_length, data_roundness, data_y_SDev]
legend = ['title1', 'title2', 'title3', 'title4']

fig, ax = plt.subplots(nrows = 1, ncols = 4, sharex = False, sharey = True, figsize = (13,3))

ax = ax.flatten()

for i, v in enumerate(everything):

    heatmap = ax[i].pcolor(v, cmap=plt.cm.Blues)

    ax[i].invert_yaxis()
    ax[i].xaxis.tick_top()
    ax[i].set_xticks(np.arange(v.shape[1])+0.5, minor=False)
    ax[i].set_xticklabels(column_labels, minor=False)
    ax[i].set_yticks(np.arange(v.shape[0])+0.5, minor=False)
    ax[i].set_yticklabels(row_labels, minor=False, fontproperties = titlefont)
    ax[i].set_xticklabels(column_labels, minor=False, fontproperties = titlefont)

    cb = fig.colorbar(heatmap, orientation='horizontal', pad=0.02, ax = ax[i])
    cb.set_label(label = legend[i], fontproperties = titlefont)
    cb.outline.set_linewidth(2)

everything 中的项只是 np.arrays,它们的形状都是相同的 (4, 6)。

它目前正在生成这样的地图:,应该看起来像这样:

我做错了什么吗?

【问题讨论】:

  • 尝试将您的 invert_yaxis 移动到 set-ticks-axis-stuff-thing 的底部。也许set_yticks 或其他命令搞砸了你的反转?
  • 只是按照你的建议试了一下,恐怕还是不行!
  • 为了清楚起见:您想翻转 DATA 而不是 y 轴?可能是我先误会你了
  • 基本上y轴标记条件。热图通常(在这种情况下)将其绘制为 d、c、b、a 而我希望顺序为 a、b、c、d。如果我自己绘制每一个(即没有子图),它会以正确的顺序进行......这让我感到困惑

标签: python matplotlib heatmap


【解决方案1】:

啊哈。我已经解决了。我从 for 循环中删除了 ax[i].invert_yaxis() 并将其卡在最后。它现在可以工作了:

for i, v in enumerate(everything):

    heatmap = ax[i].pcolor(v, cmap=plt.cm.Blues)

    ax[i].xaxis.tick_top()
    ax[i].set_xticks(np.arange(v.shape[1])+0.5, minor=False)
    ax[i].set_xticklabels(column_labels, minor=False)
    ax[i].set_yticks(np.arange(v.shape[0])+0.5, minor=False)
    ax[i].set_yticklabels(row_labels, minor=False, fontproperties = titlefont)
    ax[i].set_xticklabels(column_labels, minor=False, fontproperties = titlefont)

    cb = fig.colorbar(heatmap, orientation='horizontal', pad=0.02, ax = ax[i])
    cb.set_label(label = legend[i], fontproperties = titlefont)
    cb.outline.set_linewidth(2)

ax[0].invert_yaxis()

【讨论】:

    猜你喜欢
    • 2021-05-12
    • 2021-01-14
    • 1970-01-01
    • 2017-07-30
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多