考虑以下Python脚本:
import matplotlib.pyplot as plt
import numpy as np
x, y = np.meshgrid(np.arange(10), np.arange(10))
z = x**2-y**2+718
fig, ax = plt.subplots(1)
ax.set_xlim(650,780)
im = ax.pcolormesh(x*130./9+650, y, z, vmin=650, vmax=780)
fig.colorbar(im)
plt.show(block=False)
raw_input("Press ENTER to quit.")
这将生成一个色图贴图,其x轴为650到780,刻度为660,680,700等。 colorbar具有相同的范围,但它的刻度为660,675,690,705,整数倍为15。
一些实验表明,刻度可以出现在10,15,20,25,40,50和80的倍数处。这不会发生在x轴上,x轴总是10,20或50的倍数(根据需要添加或删除零)。是否可以使colorbar的行为方式相同?当刻度线具有如此奇怪的间距时,我发现难以从颜色条中读取值,除非它们恰好可被300整除,否则不会有100的倍数。
我知道我可以通过提供一个刻度值数组来控制刻度,但这要求我事先知道数据范围。所以这不是我想去的地方。
注意:使用Python 2.7.5,Matplotlib 1.3.1。
答案 0 :(得分:2)
mpl定位刻度的方式是使用附加到Locator
对象的Axes
个对象(参见ticker docs)
大多数轴的默认设置是使用AutoLocator
,但无论出于何种原因,颜色条使用MaxNLocator
。通过ticks
kwarg fig.colorbar
,您可以传入Locator
个实例,从而获得与x和y轴相同的行为,
import matplotlib.ticker as mticker
cb = fig.colorbar(im, ticks=mticker.AutoLocator())
或指定特定步长
cb = fig.colorbar(im, ticks=mticker.MultipleLocator(25))
PR #6375使AutoLocator
使用默认行为