Matplotlib:轴刻度数字格式-工程符号

背景

轴刻度可以按照建议的here转换为科学格式。

数字可以一次转换为工程格式,如here

所示

问题

如何格式化工程标记中的轴刻度,即数量级为3的倍数。

maduso 回答:Matplotlib:轴刻度数字格式-工程符号

您可能想确切地解释“工程符号”的含义,但是有一个EngFormatter,它会自动使用SI单位前缀(即微,毫,千,兆等)。

fig,ax = plt.subplots()
ax.set_ylim(0,1e6)
ticker = matplotlib.ticker.EngFormatter(unit='')
ax.yaxis.set_major_formatter(ticker)

resulting graph with engineering notation on y-axis

,

使用decimal模块,我想到了以下解决方案:

from decimal import Decimal
import matplotlib.pyplot as plt
import numpy as np

data1 = np.linspace(-9,9,19)
data2 = 2.3 * 10**data1

yticks = 10**(np.linspace(-9,19))
yticklabels = [Decimal(y).quantize(Decimal('0.0000000001')).normalize().to_eng_string() for y in yticks]

plt.figure(1)
plt.subplot(121)
plt.grid(True)
plt.xlabel('k')
plt.ylabel('10^k')
plt.plot(data1,data2,'k.')
plt.yscale('log')
plt.xticks(data1)
plt.yticks(yticks)
plt.subplot(122)
plt.grid(True)
plt.xlabel('k')
plt.ylabel('10^k')
plt.plot(data1,'k.')
plt.yscale('log')
plt.xticks(data1)
plt.yticks(yticks,yticklabels)
plt.show()

Output

请参阅accepted answer on your second linked Q&A0-6之间的指数未按定义/标准转换为所需的格式。另外,我还需要使用quantize中的decimal方法,因为否则输出的数字将不得不占据许多位置。 (删除quantize部分,您会明白我的意思。)

希望有帮助!

,

也许ScalarFormatter(而不是EngFormatter)可以完成这项工作。

本文链接:https://www.f2er.com/3153901.html

大家都在问