matplotlib matshow 标签

Posted

技术标签:

【中文标题】matplotlib matshow 标签【英文标题】:matplotlib matshow labels 【发布时间】:2011-04-01 13:48:24 【问题描述】:

我一个月前开始使用 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”,我将不胜感激:)

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

谢谢!我已经能够看到同样的东西 :) 但我还有另一个问题..我正在做两个热图,一个 (4x4) 和另一个 (9x9)。该程序将热图标记为 0,2,4,6,8.. 因此,当我尝试标记时,它只会为这些数字命名。我试过 ax.set_xticks(matplotlib.numpy.arange(len(list_names))) 但它减小了单元格的大小.. @Patricia - 如果您手动设置刻度位置,则在设置它们后调用 ax.axis('image') 应该可以解决您描述的问题。希望有帮助! 谢谢!问题解决了 :) 所以 ax.axis('image') 恢复图片原来的大小吧? 基本上。 (老实说,我不确定为什么设置刻度位置时轴限制会发生变化......这可能是一个错误......)有关ax.axis('image')的更多信息,请参见此处:matplotlib.sourceforge.net/api/…【参考方案2】:

另一种方法是指定刻度,然后设置相应的标签。然后你不必担心额外的越界刻度。这出现在许多 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()

【讨论】:

以上是关于matplotlib matshow 标签的主要内容,如果未能解决你的问题,请参考以下文章

热图与 matplotlib 使用 matshow

matplotlib savefig() 大小控制

Python使用matplotlib绘制大矩阵

python---matplotlib

Python安装matplotlib

Matplotlib图表上输出中文(汉字)减号问题