首页 文章

在matplotlib中制作log2缩放热图

提问于
浏览
1

我想在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显示为白色所以我使用了地震色彩图 .

Question: 如何使颜色以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 的这个刻度问题我才使用它

1 回答

  • 0

    您可以将 colorbar 对象的 locator 设置为 LogLocator ,基数为2.然后需要调用 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()
    

    enter image description here

相关问题