使用Plotly在Jupyter Notebook中绘制多组Pandas时间序列
嘿,很高兴你已经能从不同DataFrame画出两组时间序列了!虽然你没明确说具体疑问,但我猜你可能想知道更高效的实现方式、时间轴的优化技巧,或者如何让图表更易读?我来分享几个实用的方案和常见问题解决思路:
用Plotly绘制多组时间序列的实用方案
方案1:优化多DataFrame绘制方式(适配你当前的 workflow)
如果你的两组数据分别存在df1和df2这类独立的DataFrame里,可以用Plotly的add_trace方法逐个添加序列,还能灵活自定义每条曲线的样式:
import plotly.graph_objects as go # 初始化空图表 fig = go.Figure() # 添加第一组时间序列 fig.add_trace(go.Scatter( x=df1['timestamp'], y=df1['data'], mode='lines+markers', # 可选:只保留'lines'或'markers' name='数据集1', # 图例中显示的名称 line=dict(color='#1f77b4', width=2) # 自定义线条颜色和粗细 )) # 添加第二组时间序列 fig.add_trace(go.Scatter( x=df2['timestamp'], y=df2['data'], mode='lines+markers', name='数据集2', line=dict(color='#ff7f0e', width=2, dash='dash') # 用虚线区分 )) # 配置时间轴和整体布局 fig.update_layout( title='多组时间序列对比', xaxis_title='时间', yaxis_title='数据值', xaxis=dict( type='date', tickformat='%Y-%m-%d %H:%M', # 自定义时间显示格式 rangeslider=dict(visible=True) # 添加时间范围滑块,方便缩放查看 ), hovermode='x unified' # 鼠标悬停时,同一时间点的所有数据会一起显示 ) # 在Jupyter Notebook中渲染图表 fig.show()
方案2:用单个长格式DataFrame绘制(更简洁高效)
如果能把多组数据合并成长格式DataFrame(新增一列标记数据分组),用Plotly Express会大幅简化代码:
假设合并后的combined_df结构是这样的:
| timestamp | data | group |
|---|---|---|
| 2024-01-01 00:00:00 | 12.3 | 数据集1 |
| 2024-01-01 01:00:00 | 15.1 | 数据集1 |
| 2024-01-01 00:00:00 | 9.8 | 数据集2 |
实现代码:
import plotly.express as px fig = px.line( combined_df, x='timestamp', y='data', color='group', # 自动按group列区分不同曲线 title='多组时间序列对比', labels={'data': '数据值', 'timestamp': '时间'}, markers=True # 显示数据点标记 ) # 同样可以优化时间轴和交互体验 fig.update_layout( xaxis=dict( type='date', tickformat='%Y-%m-%d %H:%M', rangeslider=dict(visible=True) ), hovermode='x unified' ) fig.show()
常见疑问的解决思路
- 时间轴显示错乱:先确认
df['timestamp']是datetime64类型,用df['timestamp'] = pd.to_datetime(df['timestamp'])转换后再绘制,Plotly对标准datetime类型的支持最好。 - 数据时间点不匹配:Plotly会自动按时间点对齐显示,缺失的点不会导致曲线断裂;如果需要填充缺失值,可以用
pd.merge(df1, df2, on='timestamp', how='outer')合并后,用fillna()填充。 - Jupyter中图表不显示:确保安装了
plotly和ipywidgets,执行pip install plotly ipywidgets后重启Notebook内核即可。 - 大数据量性能问题:如果数据量很大,可以用
plotly.graph_objects的mode='lines'去掉标记点,或者对数据做降采样(比如按小时聚合)后再绘制。
如果你的具体疑问是以上之外的,比如样式定制、交互功能扩展,欢迎补充细节,我再帮你针对性解决!
内容的提问来源于stack exchange,提问作者gruenkohl
相关产品推荐
相关产品推荐

