<p>尝试以下步骤:</p>
<p>-调用<code>px.line</code>时,将参数<code>hover_data</code>添加到fig:</p>
<pre><code>fig = px.line(df, x="Date", y="Diff", color = 'POD', hover_data=['POD','Date','Percent'])
</code></pre>
<p>-将参数<code>customdata = fig.data[i].customdata</code>添加到两个<code>go.Scatter</code>调用中</p>
<p>-定义所需的悬停模板:</p>
<pre><code>template = """
<b>POD:</b> %{customdata[0]}<br>
<b>Date:</b> %{x}<br>
<b>Percent:</b> %{customdata[2]:.2f}%
<extra></extra>
"""
</code></pre>
<p>-最后,您可以使用以下命令更改鼠标悬停模板:</p>
<p><code>fig.update_traces(hovertemplate=template)</code></p>
<p>希望它能起作用</p>
<hr/>
<p>整个代码如下所示:</p>
<pre><code>import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
df = pd.read_csv("df.csv")
fig = px.line(df, x="Date", y="Diff", color = 'POD', hover_data=['POD','Date','Percent']) # modified line
included = 0
lim = {'IAD': {'lower': 90,'upper': 350, 'color':'yellow'},
'SJCtest': {'lower': 10,'upper': 12, 'color':'green'}}
for i, d in enumerate(fig.data):
for j, y in enumerate(d.y):
if y < lim[d.name]['lower'] or y > lim[d.name]['upper']:
if j == 0:
fig.add_traces(go.Scatter(x=[fig.data[i]['x'][j]],
y=[fig.data[i]['y'][j]],
customdata = fig.data[i].customdata, # newline
mode = 'markers',
marker = dict(color=lim[d.name]['color']),
name = d.name + ' threshold',
legendgroup = d.name + ' threshold'))
included = included + 1
else:
fig.add_traces(go.Scatter(x=[fig.data[i]['x'][j-1], fig.data[i]['x'][j]],
y=[fig.data[i]['y'][j-1], fig.data[i]['y'][j]],
mode = 'lines',
customdata = fig.data[i].customdata, # newline
# marker = dict(color='yellow'),
line = dict(width = 6, color = lim[d.name]['color']),
name = d.name + ' threshold',
legendgroup = d.name + ' threshold',
showlegend = False if included > 0 else True,
))
included = included + 1
# custom template
template = """
<b>POD:</b> %{customdata[0]}<br>
<b>Date:</b> %{x}<br>
<b>Percent:</b> %{customdata[2]:.2f}%
<extra></extra>
"""
fig.update_traces(hovertemplate=template) #newline
fig.show()
</code></pre>