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

ggplot2实现柱状图上方带增长率标签的箭头连线

实现柱状图上方带增长率标签的盒状箭头连线

核心实现思路

这种“盒状”箭头本质是水平线段+双向垂直箭头的组合:用短水平线衔接柱子顶部和垂直箭头,中间的双向箭头替代普通直线,同时把增长率文本放在箭头旁的居中位置。下面以Matplotlib为例给出可直接复用的代码:

完整代码示例

import matplotlib.pyplot as plt

# 替换成你的实际数据
categories = ['Q1', 'Q2']
values = [85, 102]
# 计算增长率
growth_rate = ((values[1] - values[0]) / values[0]) * 100

# 绘制基础柱状图
fig, ax = plt.subplots(figsize=(5, 4))
bars = ax.bar(categories, values, width=0.5, color='#2ecc71')

# 设置标签与柱子顶部的间距
y_offset = 3
# 获取每个柱子的顶部坐标
bar_tops = [bar.get_height() for bar in bars]
bar_xs = [bar.get_x() + bar.get_width()/2 for bar in bars]

# 绘制盒状箭头组件
# 1. 左右两侧的水平短线段
ax.plot([bar_xs[0], bar_xs[0]+0.12], [bar_tops[0]+y_offset, bar_tops[0]+y_offset], color='#333333')
ax.plot([bar_xs[1]-0.12, bar_xs[1]], [bar_tops[1]+y_offset, bar_tops[1]+y_offset], color='#333333')

# 2. 中间的双向垂直箭头(盒状的核心部分)
ax.annotate(
    '',
    xy=(bar_xs[0]+0.12, bar_tops[0]+y_offset),
    xytext=(bar_xs[0]+0.12, bar_tops[1]+y_offset),
    arrowprops=dict(arrowstyle='<->', color='#333333', linewidth=1.2)
)

# 3. 添加增长率标签
mid_y = (bar_tops[0] + bar_tops[1])/2 + y_offset
ax.text(bar_xs[0]+0.18, mid_y, f'+{growth_rate:.1f}%', va='center', fontsize=10, weight='bold')

# 调整y轴范围,避免标签被截断
ax.set_ylim(0, max(bar_tops)*1.12)
plt.tight_layout()
plt.show()

关键细节调整

  • 如果是多组连续柱子(比如全年四个季度),把箭头绘制逻辑改成循环即可
  • 箭头的长度、粗细可以通过arrowprops里的linewidth、shrink参数微调
  • 增长率标签的位置可以通过bar_xs[0]+0.18这个x坐标值调整,确保和箭头对齐

其他可视化工具适配提示

  • Seaborn:基于Matplotlib底层,直接复用上述箭头和文本绘制代码
  • Plotly:用add_shape绘制水平线段,add_annotation设置arrowhead=2实现双向箭头,再添加文本标签

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 07:52:09