如何在Matplotlib中以1个,2个,5个,10个,20个的倍数获得colorbar ticks

时间:2016-05-05 14:58:08

标签: python matplotlib colorbar

考虑以下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。

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使用默认行为