在matplotlib中制作log2缩放热图

时间:2016-01-22 14:53:56

标签: python matplotlib heatmap

我想绘制matplotlib中折叠变化的热图,其中颜色以log2比例绘制,并自定义颜色条中显示的刻度。我尝试了以下方法:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
        xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
        jaxb:extensionBindingPrefixes="xjc"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
        version="2.1">

我想将折叠变化1显示为白色,因此我使用了地震色彩图。

问题:如何将颜色间隔为log2比例,而不是log10?并且还有刻度显示为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() 代替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

的这个tick问题,我只使用了它

1 个答案:

答案 0 :(得分:0)

您可以将locator对象的colorbar设置为基数为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()

enter image description here