强制使用科学风格的底图彩条标签

rya*_*lon 5 python matplotlib matplotlib-basemap

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

cb = m.colorbar(cs, ax=ax1, format='%.4e')
Run Code Online (Sandbox Code Playgroud)

但随后每个标签都在科学上标注为基础.

如果数字足够大,则colobar会自动将它们缩小为科学记数法,将基座(即x10^n)放在颜色条的顶部,只留下系数编号作为标签.

您可以使用标准轴执行此操作,其中包含以下内容:

ax.ticklabel_format(style='sci', axis='y', scilimits=(0,0))
Run Code Online (Sandbox Code Playgroud)

是否有matplotlib.basemap颜色条的等效方法,或者标准的matplotlib颜色条?

Joe*_*ton 12

没有单行方法,但你可以通过更新颜色条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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

稍微奇怪的做事方式的原因是颜色条实际上具有静态分配的刻度和刻度标签.colorbar的axes(colorbar.ax)实际上总是在0和1之间.(因此,更改colorbar.ax.yaxis.formatter不会有任何用处.)刻度位置和标签是在创建颜色栏时从colorbar.locator和计算得到的colorbar.formatter.因此,如果您需要精确控制颜色条的刻度/可勾选项,则需要colorbar.update_ticks()在自定义刻度线的显示方式后显式调用.colorbar的便利功能在幕后为您完成,但据我所知,您想要的不能通过其他方法完成.