[英]Colorbar ticklabels don't match tick positions
我正在用pyplot.pcolormesh
繪制網格網pyplot.pcolormesh
,我想自定義顏色欄上的ticklabel。 我設置了一個刻度位置列表,並提供了一個刻度標簽列表,它們應該與刻度位置匹配,但是我不知道提前會包含哪些刻度,因為我不知道刻度的最大值和最小值數據。 問題是,我提供的第一個ticklabel總是在第一個可見的tick處使用,無論該列表是否是我列表中的第一個tick。
工作示例:
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。
這是錯誤還是功能,如果是功能,我如何確保標簽以優雅的方式匹配? 我猜我已經對數據進行了一些測試,並試圖弄清楚哪個刻度線是第一個可見的,依此類推,但這似乎並不是很Python。
這是一個功能,因為您自己設置了ticklabels
(帶有錯誤的標簽)。 除非沒有其他方法,否則最好始終避免手動設置ticklabels
。
如果刪除此行,標簽將正確顯示:
c.set_ticklabels(np.arange(11))
為了提高可讀性,您還可以考慮對顏色進行歸一化處理,以使它們變為離散色並匹配特定的整數值。 但這僅在顏色總數受限制的情況下才有效,如本例所示。
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.