使用变量更新散点图自定义数据中的plotlyhoverTemplate,而不是硬编码数字

问题描述 投票:0回答:1
bollSpreadCol = dfIbFour.columns.get_loc("bollSpread")
sma = go.Scatter(x=dfIbFour.index, y=dfIbFour["sma"], name="SMA", line=dict(color="blue", dash="dot", width = 4),customdata=dfIbFour,
                        hovertemplate="Date:%{customdata[0]}<br>"+ \
                                        "**BollSpr: %{customdata[10]:.2f} | LowBollCum%: %{customdata[34]:.2%} | SMACum%: %{customdata[36]:.2%} | EMACum%: %{customdata[39]:.2%}<br> "
                                        )

我想知道如何才能将我创建的名为 bollSpreadCol 的变量(当前位于 11)转换为plotly Scatter()

特别是,我试图用 bollSpreadCol 替换 BollSpr: %{customdata[10]:.2f} 中的

10

我希望有一个变量,每当我向当前数据帧添加新数据类型时,它都会具有正确的列号“bollSpread”。每次进行更改时都必须手动输入该列,这变得非常麻烦。我不太确定如何在绘图模板中正确包含变量?任何帮助将不胜感激

python pandas dataframe plotly
1个回答
0
投票

我们可能无法理解您的所有数据。为了减轻手动修改列名的负担,由于悬停模板由字符串组成,因此对目标列使用列号列表和字符串连接会更容易。从参考中的数据示例中,回答代码以设置任何列名称和自定义数据列号。

import pandas as pd
import plotly.graph_objects as go

df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')

fig = go.Figure()
fig.add_trace(go.Scatter(
    x=df['Date'],
    y=df["AAPL.Adjusted"],
    name="Adjust",
    line=dict(color="blue", dash="dot", width = 4),
    customdata=df,
))

col_list = [0,6,7,8,9]
new_template = ""
for col in col_list:
    new_template = new_template + df.columns[col]+":"+f"%{{customdata[{col}]}}<br>"
fig.update_traces(hovertemplate=new_template)
#print(new_template)
fig.show()

© www.soinside.com 2019 - 2024. All rights reserved.