Matplotlib:使contourf颜色标签以对数刻度和多个级别出现

时间:2018-03-31 00:19:33

标签: python matplotlib

我正在创建一个填充的轮廓图,它具有对数颜色缩放以及比默认选择的颜色更多的颜色。我基本上试图跟随this example,但是在添加更多颜色的同时,每当我添加更多颜色时,颜色条上的数字就会消失(刻度仍在那里)。

我的基本代码是

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import ticker
from matplotlib.colors import LogNorm

z = np.random.lognormal(mean=10, sigma=3, size=(10,10))

fig, ax = plt.subplots()
levels=np.logspace(np.log10(np.min(z)),np.log10(np.max(z)),100)
plot = ax.contourf(z, levels, norm=LogNorm())

cbar = fig.colorbar(plot)

plt.show()

我也尝试过使用

plot = ax.contourf(z, levels, locator=ticker.LogLocator())

但我得到了相同的结果。有刻度线,但颜色条上没有任何数字: enter image description here

另外,按照Matplotlib文档,它似乎是

plot = ax.contourf(z, 100, norm=LogNorm())

应该给我101个对数间隔的颜色级别,但它只是默认为正常的数字。

1 个答案:

答案 0 :(得分:0)

原来你需要给colorbar一个定位器,除了给一个绘图功能:

locator = ticker.LogLocator(base=10)
clb  = plt.colorbar(plot, format='%.e', ticks=locator)

而不是使用norm参数,我也使用了绘图函数中的定位器,尽管它看起来没有什么区别,只是看起来更加一致。

plot = ax.contourf(z, levels, locator=locator)

enter image description here

作为旁注,更新版本的matplotlib(至少2.1.1)引入了LogFormatterSciNotation函数,该函数创建了一个格式化程序对象,可用于使用10创建标签的format参数^ x种记法。不幸的是,我使用的主要版本是1.5.1,所以我需要使用上面的格式字符串。