【问题标题】:How to set scientific notation limits for colorbar?如何为彩条设置科学记数法限制?
【发布时间】: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


【解决方案1】:

您可以在创建颜色条时指定刻度,然后 cbformat 起作用。 IIUC 以下情节是您想要的:

fig, ax = plt.subplots()
plot = ax.contourf(z, levels, norm=LogNorm())

cbformat = ticker.ScalarFormatter()
cbformat.set_scientific('%.2e')
cbformat.set_powerlimits((-4,12))
cbformat.set_useMathText(True)
cbar = fig.colorbar(plot, ticks=levels, location='right', format=cbformat)

plt.show()

【讨论】:

    猜你喜欢
    • 2017-01-26
    • 1970-01-01
    • 2018-03-25
    • 2018-10-13
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多