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

如何在Seaborn折线图上标注数据点数值?

为Seaborn折线图的数据点添加数值标注

问题描述

我尝试为Seaborn折线图的数据点标注数值,但未能成功实现。以下是我的折线图代码,期望通过代码实现如示例图所示的数值标注效果(示例图为手动标注的结果):

import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib.dates as mdates
fig, ax = plt.subplots(figsize = (12,5))
ax.set_title("Daily Closing Price")
ax.set_ylabel("Values")
ax.set_xlabel("Date")

p1 = sns.lineplot(ax=ax, x='Date', y='Prev Close', data=result, hue='Symbol', markers=True, dashes=False, marker="o")

plt.xticks(rotation=45,horizontalalignment='right',fontweight='light')
locator = mdates.DayLocator(interval=1)
p1.xaxis.set_major_locator(locator)

解决方案

要给每个数据点标注数值,可遍历折线图中的每个数据系列,用matplotlib的ax.text()方法在对应位置添加文本标注。针对你代码中hue='Symbol'的多系列场景,处理方式如下:

修改后的完整代码:

import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib.dates as mdates

fig, ax = plt.subplots(figsize=(12, 5))
ax.set_title("Daily Closing Price")
ax.set_ylabel("Values")
ax.set_xlabel("Date")

# 绘制折线图
p1 = sns.lineplot(ax=ax, x='Date', y='Prev Close', data=result, hue='Symbol', markers=True, dashes=False, marker="o")

# 遍历每个折线系列,添加数值标注
for line in ax.lines:
    # 获取当前系列的所有数据点坐标
    x_data = line.get_xdata()
    y_data = line.get_ydata()
    # 逐个标注数值
    for x, y in zip(x_data, y_data):
        # 调整文本位置避免与标记重叠,y轴偏移量可根据数据范围修改
        ax.text(x, y + 0.1, f'{y:.2f}', ha='center', fontsize=8)

plt.xticks(rotation=45, horizontalalignment='right', fontweight='light')
locator = mdates.DayLocator(interval=1)
p1.xaxis.set_major_locator(locator)

plt.tight_layout()
plt.show()

关键说明

  • ax.lines包含图中所有折线对象,遍历即可处理每个Symbol对应的系列
  • line.get_xdata()和line.get_ydata()获取当前系列所有点的坐标
  • ha='center'让文本水平居中于数据点,y+0.1是为了让标注在点的上方,避免重叠,可根据实际数据调整偏移量
  • f'{y:.2f}'控制数值的小数位数,按需修改格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:30:16