在matplotlib 2.0中,如何将colorbar行为恢复为matplotlib 1.5的行为?

Joh*_*xon 5 python matplotlib colorbar

我刚刚升级到matplotlib 2.0,总的来说,我对新的默认值非常满意.我想回归到1.5行为的一件事是plt.colorbar特别是yticks.在旧的matplotlib中,只有主要的蜱被绘制在我的彩条上; 在新的matplotlib中,绘制了次要和主要刻度,这是我不想要的.

下面显示了使用相同的色图和对数刻度的1.5行为(左)和2.0行为(右)的比较.

colorbar yticks的比较

matplotlibrc为了恢复左侧显示的1.5行为,我需要设置什么默认值?如果没有办法使用matplotlibrc,除了降级到matplotlib 1.5之外,还有哪些其他途径可以在全球范围内进行改变?

我试过cbar.ax.minorticks_off()在每个实例之后设置简单cbar = plt.colorbar(mesh),但这并没有解决问题.

tmd*_*son 5

只需将colorbar设置为模块中的locatora 就足够LogLocatormatplotlib.ticker,然后调用update_ticks()colorbar实例.

例如,考虑这个最小的例子,它产生你看到的带有小刻度的颜色条:

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

fig, ax = plt.subplots(1)

# Some random data in your range 1e-26 to 1e-19
data = 10**(-26. + 7. * np.random.rand(10, 10))

p = ax.imshow(data, norm=colors.LogNorm(vmin=1e-26, vmax=1e-19))

cb = fig.colorbar(p, ax=ax)

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果我们现在在调用之前添加以下两行plt.show(),我们删除次要刻度:

cb.locator = ticker.LogLocator()
cb.update_ticks()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

或者,为了实现相同的目的,您可以ticks在创建颜色条时使用kwarg,并将其设置为LogLocator()

cb = fig.colorbar(p, ax=ax, ticks=ticker.LogLocator())
Run Code Online (Sandbox Code Playgroud)