簡體   English   中英

彩條刻度標簽與刻度位置不匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM