python - 如何在 Matplotlib 中获取 1、2、5、10、20 倍数的颜色条刻度

标签 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 等。颜色条具有相同的范围,但其刻度为 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/

相关文章:

python - os.rename 返回 winerror 2

python - 在 matplotlib 中用 "X"而不是 "e"科学记数法显示数字

python - 对于大文件,Python 中的整数数据输入 -> 平均 -> float 据输出

python - FastAPI 等效于 Flask 的 request.form,用于不可知的表单

python - 是否有 JavaScript 的 module.exports 的 Python 模拟?

python - Pyqt5 QLabel,图像在顶部,文本在底部

python - 使 matplotlib.pyplot 颜色条与波形和频谱图一起跨越两行

python - 如何为 matplotlib 中的圆圈分配颜色?

python - 当我添加任意值时,matplotlib (Python) 颜色栏中的刻度线位置不正确

python - 如何更改颜色条上底数和指数的字体大小?