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

Python Matplotlib双y轴组合图折线数据点上方标注数值的实现问题

双Y轴组合图折线数据点标注解决方案

你之前的标注逻辑针对的是柱状图的patches对象,折线图需要直接遍历数据点坐标添加文本标注,具体修改方法如下:

修改说明

只需要在原有代码的plt.show()之前,添加一段遍历折线数据的标注代码即可,由于折线绘制在次Y轴ax2上,因此直接使用ax2.text()方法标注即可。

完整可运行代码

import matplotlib.pyplot as plt
import pandas as pd

width=.7

t=pd.DataFrame({'bars':[3.4,3.1,5.1,5.1,3.8,4.2,5.2,4.0,3.6],'lines':[2.4,2.2,2.4,2.1,2.0,2.1,1.9,1.8,1.9]})
ax1 = t['bars'].plot(kind='bar',width=width,color='lightgrey')
ax2 = t['lines'].plot(secondary_y=True, color='red', marker='o') # marker参数用于显示折线数据点,不需要可以删除
ax1.plot(label='bars')
ax2.plot(label='lines')
lines,labels=ax1.get_legend_handles_labels()
lines2,labels2=ax2.get_legend_handles_labels()
ax2.legend(lines+lines2,labels+labels2)

ax1.yaxis.grid(linestyle='dashed')
ax1.set_axisbelow(True)
ax1.set_xticklabels(('1','2','3','4','5','6','7','8','9'))
ax1.set_ylim(0,6)
ax1.set_ylabel('title1')
ax2.set_ylim(0, 2.5)
ax2.set_ylabel('title2')

# 新增:标注折线数据点
for idx, val in enumerate(t['lines']):
    # idx对应x轴分类的位置,val是折线的y值,+0.05是向上偏移避免和折线重叠
    ax2.text(idx, val + 0.05, f'{val}', ha='center', va='bottom', color='red')

plt.show()

参数说明

  • ha='center':保证文本水平居中对齐数据点
  • va='bottom':文本底部对齐坐标点,配合y值偏移让文本刚好显示在点上方
  • 偏移量0.05可以根据显示需求调整,要增大和折线的距离调大该值即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:45:03