如何在Python pyplot条形图中展示相邻柱子的百分比变化
实现方法
你可以通过计算相邻数值的百分比变化后,在两个柱子的中间位置添加标注实现,完整示例代码如下:
import matplotlib.pyplot as plt x = [1, 2, 3] y = [10, 45, 23] # 绘制基础条形图 plt.bar(x, y) # 遍历计算并标注相邻柱子的百分比变化 for i in range(len(y)-1): # 计算百分比变化率 change_rate = (y[i+1] - y[i]) / y[i] * 100 # 计算标注位置:x为两个柱子的中点,y为两个柱子的最大值加偏移量避免遮挡 annotate_x = (x[i] + x[i+1]) / 2 annotate_y = max(y[i], y[i+1]) + 2 # 格式化标注文本,自动带正负号、保留1位小数 annotate_text = f"{change_rate:+.1f}%" # 添加标注,可按需开启arrowprops参数添加连接两个柱子的指示线 plt.annotate(annotate_text, xy=(annotate_x, annotate_y), ha='center', fontsize=10, arrowprops=dict(arrowstyle='-', lw=1, connectionstyle='bar,fraction=0.3') ) plt.show()
- 数值上升时标注自动带正号,下降时自动带负号,符合常规的变化率展示习惯
- 代码里的
annotate_y偏移量(示例中为+2)可以根据你的y轴数值范围调整,避免标注和柱子重叠 - 如果不需要两个柱子之间的连接指示线,删掉
annotate方法里的arrowprops参数即可
内容的提问来源于stack exchange,提问作者ahmedaao
相关产品推荐
相关产品推荐

