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()
当我们将鼠标悬停在 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()