如何在基于DataFrame两列的折线图hover时显示第三列文本?
实现折线图Hover时显示第三列内容
这里提供两种可行方案,分别适合不同的场景:
方案一:用Plotly快速实现(推荐)
Plotly 对交互式图表的支持非常友好,只需几行代码就能配置Hover时显示自定义内容:
import pandas as pd from datetime import datetime import random import plotly.express as px # 生成你的数据 datelist = pd.date_range(datetime.today(), periods=5).tolist() prices = [random.randint(50, 60) for _ in range(5)] text = ['AAA','BBB','CCC','DDD','EEE'] df = pd.DataFrame({'dates': datelist, 'price': prices, 'text': text}) # 绘制折线图,指定hover要显示的额外数据 fig = px.line(df, x='dates', y='price', hover_data=['text']) # 自定义hover显示模板(可选,让格式更清晰) fig.update_traces( hovertemplate='日期: %{x}<br>价格: %{y}<br>文本: %{customdata[0]}' ) fig.show()
运行后生成的图表,鼠标悬停在任意数据点上时,会自动显示对应的text列内容。
方案二:用Matplotlib + mplcursors实现
如果更习惯用Matplotlib,可以借助mplcursors库添加自定义Hover提示。首先安装依赖:
pip install mplcursors
然后编写代码:
import pandas as pd from datetime import datetime import random import matplotlib.pyplot as plt import mplcursors # 生成数据 datelist = pd.date_range(datetime.today(), periods=5).tolist() prices = [random.randint(50, 60) for _ in range(5)] text = ['AAA','BBB','CCC','DDD','EEE'] df = pd.DataFrame({'dates': datelist, 'price': prices, 'text': text}) # 创建折线图 fig, ax = plt.subplots() line, = ax.plot(df['dates'], df['price'], marker='o', linestyle='-') # 优化日期轴显示 fig.autofmt_xdate() # 配置Hover提示逻辑 cursor = mplcursors.cursor(line, hover=True) @cursor.connect("add") def on_hover(sel): # 获取当前点对应的行索引 idx = sel.target.index # 设置提示框内容 sel.annotation.set_text( f"日期: {df['dates'][idx].strftime('%Y-%m-%d %H:%M:%S')}\n" f"价格: {df['price'][idx]}\n" f"文本: {df['text'][idx]}" ) plt.show()
这样鼠标悬停在数据点上时,就会弹出包含text列内容的提示框。
内容的提问来源于stack exchange,提问作者DankyKang
相关产品推荐
相关产品推荐

