matplotlib 中的科学记数法颜色条

Posted

技术标签:

【中文标题】matplotlib 中的科学记数法颜色条【英文标题】:Scientific notation colorbar in matplotlib 【发布时间】:2014-09-22 21:14:58 【问题描述】:

我正在尝试使用 matplotlib 为我的图像添加一个颜色条。当我尝试强制以科学记数法编写刻度标签时,问题就来了。如何在彩条的刻度中强制使用科学记数法(即 1x10^0、2x10^0、...、1x10^2 等)?

例如,让我们用它的颜色条创建和绘制图像:

import matplotlib as plot
import numpy as np

img = np.random.randn(300,300)
myplot = plt.imshow(img)
plt.colorbar(myplot)
plt.show()

当我这样做时,我得到以下图像:

但是,我想查看科学记数法的刻度标签...有没有任何一行命令可以做到这一点?否则,那里有任何提示吗?谢谢!

【问题讨论】:

【参考方案1】:

你可以使用colorbar's format parameter:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.ticker as ticker

img = np.random.randn(300,300)
myplot = plt.imshow(img)

def fmt(x, pos):
    a, b = ':.2e'.format(x).split('e')
    b = int(b)
    return r'$ \times 10^$'.format(a, b)

plt.colorbar(myplot, format=ticker.FuncFormatter(fmt))
plt.show()

【讨论】:

谢谢,但我希望看到 10^1 10^2 等而不是 e+01,e+02。有可能吗? 我对您的代码进行了一些修改,以便使用乳胶显示科学记数法。非常感谢你!您的解决方案确实非常有用且非常有趣。 @AgapeGal'lo:您可以通过使用类似.10f 的东西作为format spec 来强制使用十进制表示法,这会导致代码看起来像like this。另一种可能是使用Joe Kington's FixedOrderFormatter,导致代码like this。 您可以use imshow(..., vmin=-4, vmax=4) 设置最小值和最大值。颜色条将相应调整。要获得(-4 ---> deep blue and +4 deep red),您也可以将cmap=plt.get_cmap('jet') 一个a 参数传递给imshow(再次参见示例链接)。但是请注意,虽然jet 色彩映射看起来很漂亮,但它是not recommended for scientific presentation,因为它的配色方案可以掩盖或增强不应该的变化。这就是为什么 viridis 是新的默认设置。 可以在here找到颜色图选项库。【参考方案2】:

您可以指定颜色条刻度的格式如下:

pl.colorbar(myplot, format='%.0e')

【讨论】:

谢谢,但我希望看到 10^1 10^2 等而不是 e+01,e+02。有可能吗?【参考方案3】:

有一种更直接(但不太可定制)的方法可以在不使用%.0e 格式的ColorBar 中获取科学记数法。

创建您的ColorBar

cbar = plt.colorbar()

并调用格式化程序:

cbar.formatter.set_powerlimits((0, 0))

这将使ColorBar 使用科学记数法。请参阅下面的示例图,了解 ColorBar 的外观。

这个函数的文档可以在here找到。

【讨论】:

你有关于 cbar.formatter.set_powerlimits 的文档的链接吗?我找不到它了。我只是想看看 (0,0) 是什么意思 @pwprnt 文档隐藏在此页面上:matplotlib.org/stable/api/ticker_api.html 重要信息是:“一个元组 (min_exp, max_exp) 包含确定切换阈值的 10 的幂。对于可表示为的数字?×10exp 与 1= max_exp,将使用科学计数法。"

以上是关于matplotlib 中的科学记数法颜色条的主要内容,如果未能解决你的问题,请参考以下文章

Python matplotlib colorbar 科学记数法库

matplotlib colorbar:需要在bar顶部使用指数强制科学记数法

抑制 matplotlib 中的科学记数法 offsetText

防止 matplotlib.pyplot 中的科学记数法[重复]

如何防止matplotlib中轴偏移的科学记数法?

matplotlib中如何控制科学记数法?