matplotlib matshow标签

pso*_*res 22 python django matplotlib labels

我一个月前开始使用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)
Run Code Online (Sandbox Code Playgroud)

其中alpha是django中带有4个字段的模型:'ABC','DEF','GHI','JKL'

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

Joe*_*ton 46

发生的事情是当使用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)
Run Code Online (Sandbox Code Playgroud)

作为一个完整的例子:

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()
Run Code Online (Sandbox Code Playgroud)

Matshow的例子

  • @Patricia - 如果您手动设置刻度位置,在设置它们之后调用`ax.axis('image')`应该可以解决您描述的问题.希望有所帮助! (2认同)

小智 11

另一种方法是指定刻度,然后设置相应的标签。那么你就不用担心额外的越界勾号了。这在很多 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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述