如何将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
相关产品推荐
相关产品推荐

