2010-08-20 97 views
10

一个月前我开始使用matplotlib,所以我还在学习。
我想用matshow做一个热图。我的代码如下: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的一个模型4fields: 'ABC', 'DEF', 'GHI', 'JKL'

的事情是,我不知道为什么,标签'ABC'不出现,留下最后一个没有标签的单元格。
如果有人有线索如何修改我的脚本的方式出现在“ABC”我将不胜感激:)

回答

24

发生了什么事是,xticks使用matshow当实际延长了显示数字之外。 (我不太确定这是为什么,但我几乎从未使用过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 example

+0

谢谢!我已经能够看到同样的东西:) 但我有另一个问题..我做了两个热图,一个(4x4)和另一个(9x9)。该程序标签热图0,2,4,6,8 ..所以当我试图标签,它只给这些数字的名称。 我试过用ax.set_xticks(matplotlib.numpy.arange(len(list_names))) ,但它减小了单元格的大小.. – pavid 2010-08-20 16:28:46

+2

@Patricia - 如果你手动设置勾选位置,调用ax .axis('image')'在你设置它们之后应该修复你描述的问题。希望有所帮助! – 2010-08-20 16:45:50

+0

谢谢!问题解决了:) 因此,ax.axis('image')恢复图像的原始大小,对吧? – pavid 2010-08-20 17:04:03