web-dev-qa-db-ja.com

matplotlib matshowラベル

1か月前に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」を表示するように私のスクリプトを変更する方法の手がかりを手に入れたら、私は感謝します:)

23
psoares

何が起こっているのかというと、matshowを使用すると、xticksは実際には表示されたFigureの外側に拡張されます。 (これがなぜなのか正確にはわかりませんが、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

49
Joe Kington