在 matplotlib 中制作 log2 缩放热图
making log2 scaled heatmap in matplotlib
我想在 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
存在这个勾号问题
您可以将 colorbar
对象的 locator
设置为基数为 2 的 LogLocator
。然后您需要调用 p.update_ticks()
.
plt.pcolormesh(mat, cmap=cmap, norm=SymLogNorm(linthresh=0.01, vmin=1/50., vmax=50.))
p = plt.colorbar()
p.locator=ticker.LogLocator(base=2)
p.update_ticks()
我想在 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
您可以将 colorbar
对象的 locator
设置为基数为 2 的 LogLocator
。然后您需要调用 p.update_ticks()
.
plt.pcolormesh(mat, cmap=cmap, norm=SymLogNorm(linthresh=0.01, vmin=1/50., vmax=50.))
p = plt.colorbar()
p.locator=ticker.LogLocator(base=2)
p.update_ticks()