2015-01-15 35 views
0

我正在繪製與pyplot.pcolormesh的網格,並且我想自定義顏色條上的標記標記。我列出了一個勾號位置列表,並提供了一個應該與勾號位置相匹配的勾號標籤列表,但我並不知道哪些勾號實際上會包含在內,因爲我不知道最大值和最小值數據。問題是我提供的第一個標籤總是在第一個可見的勾號中使用,無論這是否是我列表中的第一個勾號。顏色條標記與標記位置不匹配

工作實施例:

import matplotlib.pyplot as plt 
import numpy as np 

a = np.arange(1,10).reshape(3,3) 
m = plt.pcolormesh(a) 
c = plt.colorbar(m) 
c.set_ticks(np.arange(11)) 
c.set_ticklabels(np.arange(11)) 
plt.savefig('mesh.png') 

此代碼將產生圖像的下方,並且這裏的問題是,最暗藍色標有0,而在該單元格的值實際上是1,並且類似地所有其它標籤被移動了1.

這是一個錯誤還是一個特性,如果它是一個特性,我如何確保這些標籤能以優雅的方式匹配?我想我會處理一些關於數據的測試,並試圖找出哪個嘀嗒聲是第一個可見的,等等,但這似乎不是pythonic。

mesh

回答

3

它的一個特色,因爲你設置ticklabels自己(與錯誤的標籤)。最好總是儘量避免手動設置ticklabels,除非沒有其他辦法。

如果刪除此行,標籤會顯示正確:

c.set_ticklabels(np.arange(11)) 

enter image description here

爲了提高可讀性,你也可以考慮標準化的顏色,使他們成爲獨立和匹配特定的整數值。但是,只有在顏色總量有限的情況下,這個效果纔會很好,就像本例中一樣。

fig, ax = plt.subplots() 

cmap = plt.cm.jet 

bounds = np.arange(0.5,10.5,1) 
norm = mpl.colors.BoundaryNorm(bounds, cmap.N) 

m = ax.pcolormesh(a, cmap=cmap, norm=norm) 
c = plt.colorbar(m, ticks=bounds-0.5) 

enter image description here

+0

的事情是,我需要改變ticklabels的可讀性,因爲我展示對數尺度的厚度,所以我想上的標籤,說10^-1毫米, 10^-2毫米等,但我通過查詢數據來查找最大值和最小值,然後僅生成將使用的標籤。 – Tor

+0

您還可以使用'格式化程序'來獲取刻度線,它可以讀取刻度線的值,然後將其修改爲正確的格式。但是,你只需要定義格式而不是數值本身。 http://matplotlib.org/examples/pylab_examples/custom_ticker1.html –