如何为具有离散对数步长的颜色条获取正确的刻度标签?

How to get proper tick labels for a colarbar with discrete logarithmic steps?

我有一个散点图,我在上面使用 matplotlib.colors.LogNorm 对点进行了颜色映射。这给了我想要的颜色图比例,但我无法将其设为离散颜色图。 这是我拥有的:

我的目标是这样的(忽略插图):

我能够使用 matplotlib.colors.BoundaryNorm 并取得一定程度的成功,但似乎失去了 matplotlib.colors.LogNorm:

中有用的颜色条格式

谢谢

您可以明确设置颜色栏刻度的文本。这是一个例子:

import matplotlib.pyplot as plt
from matplotlib.colors import BoundaryNorm, LogNorm
import numpy as np

x = np.linspace(0, 1, 60)
y = np.linspace(0, 1, 60)
c = np.logspace(-4, 1, 60)
fig, ax = plt.subplots()
sc1 = ax.scatter(x, y, c=c, cmap='viridis', norm=LogNorm())
cbar1 = plt.colorbar(sc1, ax=ax)

bounds = np.power(10.0, np.arange(-4, 2))
ncolors = len(bounds) - 1
cmap = plt.cm.get_cmap('turbo', ncolors)
norm = BoundaryNorm(boundaries=bounds, ncolors=ncolors)

sc2 = ax.scatter(x, y + 0 + 0.1, c=c, cmap=cmap, norm=norm)
cbar = plt.colorbar(sc2, ax=ax)
cbar.ax.set_yticklabels([f'^{{{np.log10(b):.0f}}}$' for b in bounds])

plt.show()