考虑以下 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 等。颜色条具有相同的范围,但其刻度为 660、675、690、705,为 15 的整数倍。
一些实验表明,刻度可以以 10、15、20、25、40、50 和 80 的倍数出现。x 轴不会发生这种情况,它始终以 10、20 或 50 的倍数出现(如果适用,添加或删除零)。是否可以使颜色条的行为相同?我发现当刻度线的间距如此奇数且没有 100 的倍数时,很难从颜色条中读取值,除非它们恰好能被 300 整除。
我知道我可以通过提供刻度值数组来控制刻度,但这需要我事先知道数据范围。所以那不是我想去的地方。
注意:使用Python 2.7.5、Matplotlib 1.3.1。
最佳答案
mpl 定位刻度的方式是通过使用附加到 Axes
对象的 Locator
对象(请参阅 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
成为默认行为
关于python - 如何在 Matplotlib 中获取 1、2、5、10、20 倍数的颜色条刻度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37053874/