我想繪製matplotlib中摺疊更改的熱圖,其中顏色繪製在log2刻度上,並自定義哪些刻度顯示在顏色條上。我嘗試了以下內容:在matplotlib中製作log2縮放熱圖
import matplotlib.pylab as plt
import numpy as np
import matplotlib.colors
from matplotlib.colors import SymLogNorm, LogNorm
mat1 = np.clip(np.random.normal(20, 10, [20, 20]), a_min=0, a_max=500)
mat2 = np.clip(np.random.normal(10, 5, [20, 20]), a_min=0, a_max=500)
mat = np.clip(mat1/mat2, a_min=0, a_max=500)
plt.figure()
print mat
cmap = plt.cm.get_cmap("seismic")
ticks = np.array([1/float(50), 1/float(20), 1, 20, 50])
# how to make these ticks spaced out on a log2 and not log10 scale?
plt.pcolormesh(mat, cmap=cmap, norm=SymLogNorm(linthresh=0.01, vmin=1/50., vmax=50.))
p = plt.colorbar(ticks=ticks)
plt.show()
我希望倍數變化1顯示爲白色,因此我使用了地震顏色映射。
問題:如何使顏色在log2範圍內間隔,而不是log10?還有蜱顯示爲log2值而不是未記錄的值?
如果我嘗試使用LogNorm
代替SymLogNorm
那麼刻度標記和我的蜱不顯示:
# This does not work -- ticks do not show
plt.pcolormesh(mat, cmap=cmap, norm=LogNorm(vmin=1/50., vmax=50.))
p = plt.colorbar(ticks=ticks)
我知道SymLogNorm
是爲負的數據(我沒有)。我只用它,因爲這個問題打勾與LogNorm
如果你想對你的彩條的值的對數,你爲什麼不只是展現您的數據的對數? – Christoph