python - matplotilb条形图中如何开启科学计数法?
问题描述
我试图在这个图中打开科学记数法,这样 y 轴上的数字就不会占用太多空间。
目前我的代码是:
import matplotlib.pyplot as plt
import matplotlib as mpl
import pandas as pd
mpl.rcParams.update({'font.size':15})
mpl.rcParams.update({'legend.columnspacing':0.5})
energy_cm = 1550835.86856494
energy_fm = 1456129.29966378
energy_cm_trad = 1393026.50949191
energy_fm_trad = 1314814.95236864
energy_cm_hw = 1200000
energy_fm_hw = 1100000
data_energy = { 'Algorithm' : ['Algorithm 1', 'Algorithm 2'],
'SW' : [energy_cm, energy_fm],
'HW' : [energy_cm_hw, energy_fm_hw],
'Trad' : [energy_cm_trad, energy_fm_trad]
}
df_energy = pd.DataFrame(data_energy)
width = 0.7
fig = plt.figure(figsize=(8, 8))
ax = plt.axes()
df_energy[['Algorithm', 'SW', 'Trad', 'HW']].set_index('Algorithm').plot(kind='bar', legend=True, width=width, rot=0, ax=ax, color=('sandybrown','rosybrown', 'goldenrod','indianred','tomato','r'))
ax.set_ylabel('Energy in nJ')
ax.ticklabel_format(style='sci', axis='y')
# ax.yaxis.set_major_formatter(scientific_formatter)
# ax.ticklabel_format(useOffset=True, axis='y')
fig.tight_layout()
plt.show()
这是相应的情节:
基本上我的问题与这个问题相反。
我有相同的错误消息并通过更改解决了它
ax.ticklabel_format(style='sci')
到
ax.ticklabel_format(style='sci', axis='y')
我尝试使用FuncFormatter
生成自定义科学记数法,但我不喜欢结果,因为轴上的每个刻度都标有指数
而不是指数/偏移量简单地标记在轴的顶部,如下图所示(来自互联网)
我怎样才能让我的情节使用默认的科学记数法matplotlib
?
解决方案
您可以在之前添加以下 3 行plt.show()
:
mf = mpl.ticker.ScalarFormatter(useMathText=True)
mf.set_powerlimits((-2,2))
plt.gca().yaxis.set_major_formatter(mf)
还要检查这个链接set_powerlimits()
推荐阅读
- python - 要求输入时打印不需要的无
- typescript - 使用打字稿对逗号分隔的数字列表求和
- azure - Azure Active Directory SAML2.0 经过身份验证的 Web 应用的用户属性映射
- javascript - 如何在getUserMedia()中始终设置麦克风询问(默认)?
- c++ - 我们如何使用线程中的计时器在使用 vc++ 的特定时间段后创建文本文件?
- javascript - 如何从数组中提取字母和数字并使用使用javascript的函数传递给字符串?
- c++ - C++ 中的 return 语句有类型吗?
- wpf - FlowDocument 上的 MouseDown 事件向下滚动 FlowDocumentScrollViewer
- linux - 已解决:在 bash 过程中向数组添加错误消息
- amazon-web-services - 如果令牌过期,AWS HTTP Api Gateway lambda 授权方如何返回 401