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