matplotlib色条上的对数缩放小刻度?

时间:2014-08-22 19:45:46

标签: python matplotlib

我在使用颜色条设置pcolormesh图时遇到了一些麻烦,该颜色条在颜色条上包含对数间隔的小刻度标记。

我最接近的是这样的:

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

xbins = np.linspace(0, 1, 50)
ybins = np.linspace(0, 1, 50)

data = np.random.random((49,49))

fig, ax = plt.subplots()

im = ax.pcolormesh(xbins, ybins, data, norm=matplotlib.colors.LogNorm())

cb = fig.colorbar(im)

cb.ax.minorticks_on()

plt.savefig('test.png')

此解决方案的问题在于,次要刻度在日志空间中均匀分布:

enter image description here

我想设置绘图,所以我在线性空间中有均匀间隔的小刻度,这应该在该绘图上显示不均匀间距。

我知道我可以使用FixedFormatter手动设置次要刻度标签,但如果可能的话,我不愿意这样做,因为我会自动制作大量的绘图。

2 个答案:

答案 0 :(得分:3)

我认为自定义色条的最佳方式是' ticks是使用" ticks" fig.colorbar方法的参数,而不是试图修改包含colorbar的ax的属性。

from matplotlib.ticker import LogLocator
"..."
cb = fig.colorbar(im, ticks = LogLocator(subs=range(10)))       

enter image description here

答案 1 :(得分:1)

为子孙后代添加:
从这个回答:@JoeKington https://stackoverflow.com/a/20079644/230468

minorticks = p.norm(np.arange(1, 10, 2))
cb.ax.xaxis.set_ticks(minorticks, minor=True)

这很烦人,您必须手动创建刻度线位置,但它似乎有效。