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

我的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
相关产品推荐
相关产品推荐

