如何在Plotly中可视化上月/全年数据时标注最近一周的数据?
用Plotly标注折线图中最近一周的所有数据点
原有代码可以实现标注折线图的最后一个数据点,要扩展为标注最近一周的所有数据点,只需在筛选数据和添加标注trace的环节做调整,以下是完整实现代码:
# imports import pandas as pd import plotly.express as px from datetime import timedelta # data df = px.data.stocks() df = df.drop('AMZN', axis = 1) # 转换日期格式为datetime,方便后续筛选 df['date'] = pd.to_datetime(df['date']) colors = px.colors.qualitative.T10 # plotly fig = px.line(df, x = 'date', y = [c for c in df.columns if c != 'date'], template = 'plotly_dark', color_discrete_sequence = colors, title = 'Stocks (最近一周数据标注)', ) # move legend fig.layout.legend.x = -0.3 # 计算最近一周的起始日期:取数据中最晚日期往前推7天 latest_date = df['date'].max() one_week_ago = latest_date - timedelta(days=7) # 遍历每个trace,添加最近一周数据点的标注 for i, d in enumerate(fig.data): # 将当前trace的日期数据转为datetime,匹配筛选条件 trace_dates = pd.to_datetime(d.x) # 筛选出最近一周的索引 week_indices = [idx for idx, date in enumerate(trace_dates) if date >= one_week_ago] # 获取最近一周的x和y数据 week_x = [d.x[idx] for idx in week_indices] week_y = [d.y[idx] for idx in week_indices] fig.add_scatter(x=week_x, y=week_y, mode = 'markers+text', text = [round(y, 2) for y in week_y], # 保留两位小数让文本更整洁 textfont = dict(color=d.line.color), textposition='middle right', marker = dict(color = d.line.color, size = 10), legendgroup = d.name, showlegend=False) fig.show()
关键修改说明:
- 日期格式转换:先把原始数据的
date列转为datetime类型,方便后续日期范围筛选 - 计算最近一周范围:通过数据中最晚日期往前推7天,确定最近一周的起始点
- 筛选最近一周数据:针对每个折线trace,筛选出属于最近一周的所有数据点索引,提取对应的x(日期)和y(数值)
- 标注优化:给标注文本保留两位小数,让图表更美观;调整marker大小避免遮挡折线
内容的提问来源于stack exchange,提问作者Ananth
相关产品推荐
相关产品推荐

