【发布时间】:2022-09-23 02:22:36
【问题描述】:
我试图在颜色条的所有刻度中加入科学记数法(下图)。我可以通过colorbar(cs, format=\'%.2e\') 做到这一点。问题是,在我使用以下几行设置刻度标签后
cbar.set_ticks(levels)
cbar.set_ticklabels(levels)
符号的下限似乎变为 -5,它显示了 -4 的正常数字,如下图所示(注意刻度标签 0.00036)。我知道可以通过ticklabel_format 更改轴的科学记数法限制。我正在为颜色条寻找相同的选项,将其从 -5 更改为 -4。
任何帮助表示赞赏。
更新1:
我已经使用了以下代码,但还没有运气。
cbformat = matplotlib.ticker.ScalarFormatter()
cbformat.set_powerlimits((-12,12))
cbformat.set_scientific(\'%.2e\')
cbar = m.colorbar(cs, location=\'right\',format=cbformat, pad=\"10%\")
cbar.set_ticks(levels)
cbar.set_ticklabels(np.round(levels,7))
更新 2:
要重现该问题,请使用我从 post 复制的以下代码
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import ticker
from matplotlib.colors import LogNorm
z = np.random.lognormal(mean=10, sigma=3, size=(10,10))
z=z*10**-11
levels = np.linspace(z.min(), np.quantile(z,0.8), 8)
levels = np.append(levels, np.quantile(z,0.85))
levels = np.append(levels, np.quantile(z,0.9))
levels = np.append(levels, np.quantile(z,0.95))
levels = np.append(levels, z.max())
fig, ax = plt.subplots()
# levels=np.logspace(np.log10(np.min(z)),np.log10(np.max(z)),100)
plot = ax.contourf(z, levels, norm=LogNorm())
cbar = fig.colorbar(plot, location=\'right\',format=\'%.2e\')
cbar.set_ticks(levels)
cbar.set_ticklabels(np.round(levels,9))
plt.show()
-
IIUC 你可以在这里使用
set_powerlimits -
@Rabinzel 感谢您的回复。我尝试了以下方法,但没有运气。 cbformat = matplotlib.ticker.ScalarFormatter() cbformat.set_powerlimits((-12,12)) cbformat.set_scientific(\'%.2e\') cbar = m.colorbar(cs, location=\'right\',format= cbformat, pad=\"10%\") cbar.set_ticks(levels) cbar.set_ticklabels(np.round(levels,7))
-
我认为 set_powerlimits 仅指 e 之后的数字,而不是整数。不要将其设置为 -12,而是尝试将其设置为 -5
-
@Rabinzel 它也不起作用
-
您能否添加您的数据样本以重现该问题?
标签: python matplotlib colorbar