在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')
这个方案的问题在于,小刻度在对数空间中是均匀分布的:
我想把图设置成小刻度在线性空间中均匀分布,这样在这个图上看起来就会是不均匀的分布。
我知道可以用FixedFormatter
手动设置小刻度的标签,但如果可以的话,我更希望不这样做,因为我会自动生成很多图。
2 个回答
3
我觉得自定义颜色条的刻度最好的方法是使用fig.colorbar方法中的“ticks”参数,而不是试图去修改包含颜色条的坐标轴的属性。
from matplotlib.ticker import LogLocator
"..."
cb = fig.colorbar(im, ticks = LogLocator(subs=range(10)))
1
为了后人着想:
来自这个回答:@JoeKington https://stackoverflow.com/a/20079644/230468:
minorticks = p.norm(np.arange(1, 10, 2))
cb.ax.xaxis.set_ticks(minorticks, minor=True)
这挺烦人的,因为你必须手动设置刻度的位置,不过看起来是有效的。