matplotlib中的科学记谱法colorbar

Ale*_*dro 25 python scientific-notation matplotlib colorbar

我正在尝试使用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()
Run Code Online (Sandbox Code Playgroud)

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

用前面的代码创建的图像

但是,我希望看到科学记数法中的ticklabels ...是否有任何一行命令来执行此操作?否则,那里有任何提示吗?谢谢!

unu*_*tbu 38

你可以使用colorbar's format参数:

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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 为了用乳胶显示科学记数法,我稍微修改了你的代码.非常感谢你!你的解决方案非常有用,确实非常有趣. (2认同)

Fal*_*lko 27

您可以指定颜色栏刻度的格式,如下所示:

pl.colorbar(myplot, format='%.0e')
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,但是我想看10 ^ 1 10 ^ 2等,而不是e + 01,e + 02。可能吗? (3认同)

Jos*_*rah 5

有一种更直接(但不太可定制)的方法可以在ColorBar没有%.0e格式的情况下获得科学记数法。

创建您的ColorBar:

cbar = plt.colorbar()
Run Code Online (Sandbox Code Playgroud)

并调用格式化程序:

cbar.formatter.set_powerlimits((0, 0))
Run Code Online (Sandbox Code Playgroud)

这将使ColorBar使用科学记数法。请参阅下面的示例图以了解ColorBar将如何显示。

在此处输入图片说明

可以在此处找到此功能的文档。


小智 5

看来,cbar.formatter.set_powerlimits((0,0))约瑟夫的回答中仅一人还没有呈现像 $10^3$ 这样的数学格式。

添加cbar.formatter.set_useMathText(True)类似 $10^3$ 的值。

import matplotlib.pyplot as plt
import numpy as np

img = np.random.randn(300,300)*10**5
myplot = plt.imshow(img)
cbar = plt.colorbar(myplot)
cbar.formatter.set_powerlimits((0, 0))

# to get 10^3 instead of 1e3
cbar.formatter.set_useMathText(True)

plt.show()
Run Code Online (Sandbox Code Playgroud)

这会生成 在此输入图像描述

set_useMathText() 请参阅此处的文档。