30

我一个月前开始使用matplotlib,所以我还在学习。
我正在尝试用 matshow 做一个热图。我的代码如下:

data = numpy.array(a).reshape(4, 4)  
cax = ax.matshow(data, interpolation='nearest', cmap=cm.get_cmap('PuBu'), norm=LogNorm())  
cbar = fig.colorbar(cax)

ax.set_xticklabels(alpha)  
ax.set_yticklabels(alpha)

其中 alpha 是来自 django 的具有 4 个字段的模型:'ABC'、'DEF'、'GHI'、'JKL'

问题是我不知道为什么,标签“ABC”没有出现,最后一个单元格没有标签。
如果有人知道如何修改我的脚本以显示“ABC”,我将不胜感激:)

4

2 回答 2

61

发生的事情是使用 matshow 时 xticks 实际上延伸到显示的图形之外。(我不太确定这是为什么。不过,我几乎从未使用过 matshow。)

为了证明这一点,请查看ax.get_xticks(). 在你的情况下,它是array([-1., 0., 1., 2., 3., 4.]). 因此,当您设置 xtick 标签时,“ABC”在 <-1, -1> 处,并且不会显示在图中。

最简单的解决方案是在标签列表中添加一个空白标签,例如

ax.set_xticklabels(['']+alpha)
ax.set_yticklabels(['']+alpha)

作为一个完整的例子:

import numpy as np
import matplotlib.pyplot as plt

alpha = ['ABC', 'DEF', 'GHI', 'JKL']

data = np.random.random((4,4))

fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(data, interpolation='nearest')
fig.colorbar(cax)

ax.set_xticklabels(['']+alpha)
ax.set_yticklabels(['']+alpha)

plt.show()

Matshow 示例

于 2010-08-20T15:33:21.560 回答
7

另一种方法是指定刻度,然后设置相应的标签。然后你不必担心额外的越界刻度。这出现在许多 matplotlib 演示中。所以在这里,注意额外的调用ax.set_xticksax.set_yticks

import numpy as np
import matplotlib.pyplot as plt

alpha = ['ABC', 'DEF', 'GHI', 'JKL']

data = np.random.random((4,4))

fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(data, interpolation='nearest')
fig.colorbar(cax)

xaxis = np.arange(len(alpha))
ax.set_xticks(xaxis)
ax.set_yticks(xaxis)
ax.set_xticklabels(alpha)
ax.set_yticklabels(alpha)

plt.show()

在此处输入图像描述

于 2020-12-04T23:02:22.797 回答