Plotly python 添加注释以在每个点显示所有列值

Plotly python add annotation to display all column values at every point

当我们将鼠标悬停在 plotly 中的数据点上时,我试图绘制每个点的所有列值

我的代码如下

import plotly.graph_objects as go
import plotly.io as pio
from plotly.subplots import make_subplots
import pandas as pd

# data
pio.templates.default = "plotly_white"
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
df_s = df[['Date','AAPL.Open','AAPL.High','AAPL.Low','dn','mavg'
        ]]
df_s = df_s.set_index('Date')
df_s.tail()
cols = df_s.columns
ncols = len(cols)

# subplot setup
fig = make_subplots(rows=ncols, cols=1, shared_xaxes=True)

for i, col in enumerate(cols, start=1):
    fig.add_trace(go.Scatter(x=df_s[col].index, y=df_s[col].values, name=df_s[col].name), row=i, col=1)

fig.update_layout(
    autosize=False,
    width=1200,
    height=800,)

    
fig.show()

目前,当我将鼠标悬停在数据点上时,它会单独显示该列的值。我有兴趣看 'Date'、'AAPL.Open'、'AAPL.High'、'AAPL.Low'、'dn'、'mavg' 每当我将鼠标悬停在任何图

我尝试了 add_annotations,但没有成功。有办法吗?提前谢谢你

不,这行不通。有一个未解决的问题:

https://github.com/plotly/plotly.js/issues/4755

而且这似乎不会很快到来。你必须在你的方式和类似的方式之间做出决定:

import pandas as pd
import plotly.express as px 

pio.templates.default = "plotly_white"
df_s = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv")
df_s = df_s.melt(id_vars=["Date"]+list(df.keys()[5:]), var_name="AAPL")

fig = px.line(df_s, x="Date", y="value", color="AAPL")

fig.update_layout(
    autosize=False,
    width=1200,
    height=800,
    hovermode="x")
    
fig.show()

输出:

正如@Marco_CH 所指出的,Plotly 中不存在这个确切的功能。但是,您可以尝试在 x-axis 上使用 unified hovermode,这样只有一个悬停框,并从每个悬停模板中删除日期,因为它已经显示在悬停框的顶部。

import pandas as pd
import plotly.express as px 

df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv")
df1 = df.melt(id_vars=['Date']+list(df.keys()[5:]), var_name='AAPL')
fig = px.line(df1, x='Date', y='value', color='AAPL' )

## remove date from each hovertemplate
for fig_data in fig.data:
    fig_data['hovertemplate'] = fig_data['hovertemplate'].replace("<br>Date=%{x}","")
fig.update_layout(hovermode="x unified")
    
fig.show()