You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Seaborn条形图的bar_label设置为科学计数法

Seaborn条形图标签转为科学计数法显示

问题描述

我用Seaborn绘制条形图时,需要把Pandas DataFrame中的数据作为条形标签,目前已实现标签显示,但希望将标签转换为科学计数法。原代码如下:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

d = {'name': ['experiment1','experiment2'], 'reads': [15000,12000], 'positiveEvents': [40,60]}
df = pd.DataFrame(d)
df['proportianPositive'] = df['positiveEvents']/df['reads']

p = sns.barplot(data=df,x='name',y='positiveEvents', palette = 'colorblind', alpha =0.8)
p.bar_label(p.containers[0],labels=df.proportianPositive, padding = -50, rotation=90)
plt.show()

当前标签为普通小数格式,如何将df.proportianPositive转换为科学计数法并显示在条形图上?

解决方案

只需对proportianPositive列的每个数值做科学计数法的字符串格式化处理,再将处理后的结果传给bar_label的labels参数即可。可以用Pandas的apply方法结合Python格式化语法实现:

修改后的代码:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

d = {'name': ['experiment1','experiment2'], 'reads': [15000,12000], 'positiveEvents': [40,60]}
df = pd.DataFrame(d)
df['proportianPositive'] = df['positiveEvents']/df['reads']

p = sns.barplot(data=df,x='name',y='positiveEvents', palette = 'colorblind', alpha =0.8)
# 将数值格式化为保留2位小数的科学计数法
sci_labels = df['proportianPositive'].apply(lambda x: "{:.2e}".format(x))
p.bar_label(p.containers[0], labels=sci_labels, padding=-50, rotation=90)
plt.show()

关键说明

  • "{:.2e}"是科学计数法的格式化语法:.2表示保留2位小数,e指定使用科学计数法格式;如果需要调整小数位数,比如保留3位,改成"{:.3e}"即可。
  • 也可以用f-string写法替代:lambda x: f"{x:.2e}",效果完全一致。

内容的提问来源于stack exchange,提问作者Oll

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 16:32:07