强制使用科学风格为底图颜色条标签

6 投票
1 回答
5325 浏览
提问于 2025-04-18 17:39

字符串格式化可以用来为matplotlib.basemap的颜色条标签指定科学计数法:

cb = m.colorbar(cs, ax=ax1, format='%.4e')

但是这样每个标签都会用科学计数法显示基数。

如果数字足够大,颜色条会自动把它们转换成科学计数法,把基数(也就是 x10^n)放在颜色条的顶部,只留下系数数字作为标签。

你可以用标准坐标轴做到这一点,方法如下:

ax.ticklabel_format(style='sci', axis='y', scilimits=(0,0))

那么对于matplotlib.basemap的颜色条,有没有类似的方法,或者说标准的matplotlib颜色条呢?

1 个回答

14

虽然没有一种简单的方法可以做到这一点,但你可以通过更新颜色条的 formatter 来实现,然后调用 colorbar.update_ticks() 来更新。

import numpy as np
import matplotlib.pyplot as plt

z = np.random.random((10,10))

fig, ax = plt.subplots()
im = ax.imshow(z)
cb = fig.colorbar(im)

cb.formatter.set_powerlimits((0, 0))
cb.update_ticks()

plt.show()

enter image description here

这样做的原因有点特别,因为颜色条的刻度和刻度标签是静态分配的。颜色条的坐标轴(colorbar.ax)的范围实际上总是从0到1。(所以,改变 colorbar.ax.yaxis.formatter 并不会有什么实际效果。)刻度的位置和标签是根据 colorbar.locatorcolorbar.formatter 计算出来的,并在创建颜色条时分配。因此,如果你想精确控制颜色条的刻度和刻度标签,就需要在自定义刻度显示方式后,明确调用 colorbar.update_ticks()。颜色条的一些便利函数会在后台为你处理这些,但据我所知,你想要的效果不能通过其他方法实现。

撰写回答