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

如何使用Plotly绘制带事件标注的枕头价格-日期折线图

Plotly 绘制带事件标注的枕头价格折线图方案

原有代码问题说明

  • fig.update_layout() 语句缺失右括号,会直接触发语法报错
  • 直接转置DataFrame时没有处理列名、字段类型,会导致坐标轴映射异常
  • 缺失事件标注的对应逻辑,无法展示日期对应的事件信息

完整实现步骤

1. 数据预处理

先把原始宽表整理为绘图用的标准长表结构,拆分价格字段和事件字段:

import pandas as pd
import plotly.express as px

# 将指标列设为索引
df = df.set_index('Metrics(指标)')
# 提取枕头价格、事件两行数据,转置后重置索引
plot_data = df.loc[['The price of pillows(枕头价格)', 'Events(事件)']].T.reset_index()
# 重命名列
plot_data.columns = ['Date', 'PillowPrice', 'Event']
# 转换价格列为数值类型,过滤空值
plot_data['PillowPrice'] = pd.to_numeric(plot_data['PillowPrice'], errors='coerce')
# 提取所有存在有效事件的日期点,用于后续标注
event_points = plot_data[plot_data['Event'].notna()]

2. 绘制基础折线图

修正原有语法问题,先绘制价格趋势线:

fig = px.line(
    plot_data.dropna(subset=['PillowPrice']),
    x='Date',
    y='PillowPrice',
    width=900,
    height=800,
    markers=True, # 显示数据点标记,方便对应事件位置
    line=dict(color='#1f77b4', width=2)
)

fig.update_layout(
    title="The price of pillows trend",
    xaxis_title="Date",
    yaxis_title="Price",
    title_x=0.5 # 标题居中
)

3. 添加事件标注

遍历所有事件点,为每个点添加带箭头的文本标注,调整标注位置避免遮挡折线:

for _, row in event_points.iterrows():
    # 获取当前事件日期对应的价格,确定标注锚点
    anchor_price = plot_data[plot_data['Date'] == row['Date']]['PillowPrice'].iloc[0]
    fig.add_annotation(
        x=row['Date'],
        y=anchor_price,
        text=row['Event'],
        showarrow=True,
        arrowhead=2,
        yshift=25, # 标注向上偏移25像素,可根据显示效果调整
        bgcolor='white',
        bordercolor='#333',
        borderwidth=1,
        font=dict(size=10)
    )

fig.show()

运行代码后即可得到符合要求的折线图:价格趋势清晰,每个有事件的日期点会通过箭头指向对应位置,标注事件内容,和参考示例效果一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 20:43:10