text
您可以通过和的正确组合来做到这一点hovertemplate
:
for ser in fig['data']:
ser['text']=list(set([d.strftime('%Y-%m-%d') for d in df['dates']]))
ser['hovertemplate']='category=open<br>dates=%{text}<br>price=%{y}<extra></extra>'
fig.show()
ser['text'] 之所以如此混乱,是因为结果图在 x 轴上显示了唯一的日期。而且,由于plotly.express
适用于 tidy 或long 而不是 wide data,因此数据集中包含您的日期的列很可能没有唯一的日期值。
这是一个基于一些具有不同类别的金融时间序列数据的示例,这是一个完美的案例px.line
:
带有示例数据的完整代码:
# imports
import pandas as pd
import plotly.graph_objects as go
from datetime import datetime
import plotly.express as px
# data
open_data = [33.0, 33.3, 33.5, 33.0, 34.1]
high_data = [33.1, 33.3, 33.6, 33.2, 34.8]
low_data = [32.7, 32.7, 32.8, 32.6, 32.8]
close_data = [33.0, 32.9, 33.3, 33.1, 33.1]
dates = [datetime(year=2020, month=10, day=10),
datetime(year=2020, month=10, day=11),
datetime(year=2020, month=10, day=12),
datetime(year=2020, month=10, day=13),
datetime(year=2020, month=10, day=14)]
# data organized in a pandas dataframe
df=pd.DataFrame(dict(open=open_data,
high=high_data,
low=low_data,
close=close_data,
dates=dates))
# transform the data from wide to long
df = pd.melt(df, id_vars=['dates'], value_vars=df.columns[:-1],
var_name='category', value_name = 'price')
# setup for a perfect plotly time series figure
fig = px.line(df, x="dates", y="price", title='Prices', color = 'category')
# edit text and hovertemplate
for ser in fig['data']:
ser['text']=list(set([d.strftime('%Y-%m-%d') for d in df['dates']]))
ser['hovertemplate']='category=open<br>dates=%{text}<br>price=%{y}<extra></extra>'
fig.show()