2010-08-20 103 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