matplotlib 科学记数法colorbar

p1iqtdky  于 2023-10-24  发布在  其他
关注(0)|答案(4)|浏览(225)

我尝试使用matplotlib为我的图像添加一个颜色条。当我尝试强制使用科学计数法编写ticklabels时出现了问题。我如何在颜色条的刻度中强制使用科学计数法(即,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()

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

但是,我想看看科学计数法中的ticklabel.

ig9co6j1

ig9co6j11#

可以使用colorbarformat参数:

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()

34gzjxbg

34gzjxbg2#

您可以按以下方式指定颜色条记号的格式:

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

m2xkgtsf3#

有一种更直接(但不太可定制)的方法可以在ColorBar中获得科学记数法,而无需%.0e
创建您的ColorBar

cbar = plt.colorbar()

然后调用格式化程序:

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

这将使ColorBar使用科学计数法。请参阅下面的示例图来查看ColorBar的外观。

此函数的文档可以在here中找到。

djp7away

djp7away4#

似乎在Joseph的答案中,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()

这将生成x1c 0d1x
在这里查看set_useMathText()的文档。

相关问题