Python 在matplotlib中制作log2缩放热图

Python 在matplotlib中制作log2缩放热图,python,matplotlib,heatmap,Python,Matplotlib,Heatmap,我想在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_

我想在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\u ticks()


您可以将
色条
对象的
定位器
设置为以2为底的
日志定位器。然后需要调用
p.update\u ticks()


如果您想在颜色栏上绘制值的对数,为什么不直接绘制数据的对数?如果您想在颜色栏上绘制值的对数,为什么不直接绘制数据的对数?那么这是否意味着log2单位为1和log2单位为2之间的颜色差是两倍?i、 e.2的单位是1的单位的两倍?(相对于2的单位比1的单位红10倍)那么这是否意味着1的log2单位和2的log2单位之间的颜色差异是2倍?i、 e.2的单位是1的单位的两倍?(与2号机组相反,2号机组的红色是1号机组的10倍)
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()