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

如何为直方图的每个柱状图添加科学计数法标签?

问题描述

example

我的y轴已设置为科学计数法,现在想要在每个柱状图上方添加科学计数法标签。我尝试使用"{:.2E}".format进行格式化,但由于要处理的是整个数组(count),该方法无法生效,请问有解决思路吗?

用户代码示例

xx= np.arange(0,10)
labels = [0.2,0.1,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0]

plt.figure(figsize=(7, 4.5))
plt.bar(xx, count)
plt.xlabel('base.distance')
plt.xticks(xx, labels)

addlabels(xx,count.astype('int32'))

plt.ticklabel_format(axis='y', style='sci', scilimits=(0,0))

plt.ylabel('Count')
plt.title(file)
plt.show()
解决思路

直接对数组用字符串格式化会失效,需要遍历数组中的每个元素单独处理。可以替换原有的addlabels调用,通过循环逐个为每个柱状图添加格式化后的标签:

import numpy as np
import matplotlib.pyplot as plt

# 模拟count数组,实际使用时替换为你的真实数据
count = np.array([1200, 800, 0, 5000, 10000, 15000, 20000, 25000, 30000, 35000])

xx= np.arange(0,10) 
labels = [0.2,0.1,0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0]

plt.figure(figsize=(7, 4.5)) 
plt.bar(xx, count)
plt.xlabel('base.distance') 
plt.xticks(xx, labels)

# 遍历每个柱子,添加科学计数法标签
for x, val in zip(xx, count):
    # 格式化数值为两位小数的科学计数法
    label_text = "{:.2E}".format(val)
    # 在柱子上方居中添加标签,va='bottom'避免标签和柱子重叠
    plt.text(x, val, label_text, ha='center', va='bottom')

plt.ticklabel_format(axis='y', style='sci', scilimits=(0,0))

plt.ylabel('Count')
plt.title(file) # 确保file变量已提前定义
plt.show()

如果你的addlabels是自定义函数,也可以修改函数内部逻辑,让它对每个传入的数值单独执行"{:.2E}".format()格式化,再添加标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:05:32