如何基于变量值自定义Plotly Python的悬浮提示信息
解决Plotly Scatter悬浮提示中空字段不显示的问题
Plotly的hovertemplate本身不支持直接的条件判断逻辑,要实现空字段不显示的效果,最可靠的方式是预处理数据,为每个数据点生成自定义的悬浮提示文本,然后通过hovertext参数传递给图表。
步骤1:预处理DataFrame,生成动态悬浮文本列
利用pandas的apply方法逐行构建提示内容,仅保留非空字段的条目:
import pandas as pd import plotly.graph_objects as go # 读取你的数据(示例) df = pd.read_csv('your_data_file.csv') def build_hover_content(row): content_parts = [] # 固定显示的字段 content_parts.append(f"Request period: {row['Request period']}") content_parts.append(f"Taken time: {row['Taken time']}") # 仅当ai字段非空时添加 if not pd.isna(row['ai']) and str(row['ai']).strip(): content_parts.append(f"Error msg: {row['ai']}") # 添加logCorr字段(若该字段也可能为空,可复用上述判断逻辑) content_parts.append(f"LogCorr: {row['logCorr']}") # 用<br>拼接成多行文本 return '<br>'.join(content_parts) # 生成hover_text列 df['hover_text'] = df.apply(build_hover_content, axis=1)
步骤2:绘制图表时使用自定义悬浮文本
将生成的hover_text传递给go.Scatter的hovertext参数,并通过hovertemplate控制显示格式(隐藏默认的系列名称):
fig = go.Figure() fig.add_trace( go.Scatter( x=df['Request time'], y=df['Taken time'], name="System performance", hovertext=df['hover_text'], # 直接显示hovertext内容,<extra></extra>用于隐藏默认系列名 hovertemplate='%{hovertext}<extra></extra>', secondary_y=True ) ) fig.show()
效果说明
处理后,当ai字段为nan或空字符串时,悬浮提示中不会出现空的"Error msg"条目;只有当ai有有效值时,才会显示该条目,保证提示内容的简洁美观。
内容的提问来源于stack exchange,提问作者Xaruman
相关产品推荐
相关产品推荐

