DGo*_*nov 6 python plot dataset hover plotly
这是我的数据集:
按年份锁定我的数据框 并按月份分组后,我继续计算百分比增加/减少作为新列;它最终看起来像这样:
现在对于我的 Plotly 绘图,我使用它来显示跟踪并添加一些悬停信息:
fig.add_trace(go.Scatter(x=group_dfff.Months, y=group_dfff.Amount, name=i,
hovertemplate='Price: $%{y:.2f}'+'<br>Week: %{x}'))
Run Code Online (Sandbox Code Playgroud)
现在你可以看到有一个参数hovertemplate,我可以传递我的 x 和 y ......但是,我不知道如何在其中包含我的PERC_CHANGE值。
问题:如何在 ? 中包含其他想要的列的值hovertemplate?具体来说,我如何在下面显示所需的输出时包含PERC_CHANGE值:
我解决了我的具体问题,请查看下面的图片(添加第 3 个元素,请参阅评论),但是问题仍然相同,因为我不知道如何为第 4 个、第 5 个等元素执行此操作。

非常感谢帮助!
小智 21
对于 Plotly Express,您需要custom_data在创建图形时使用参数。例如:
fig = px.scatter(
data_frame=df,
x='ColX',
y='ColY',
custom_data=['Col1', 'Col2', 'Col3']
)
Run Code Online (Sandbox Code Playgroud)
然后使用update_tracesand修改它hovertemplate,将其引用为customdata. 例如:
fig.update_traces(
hovertemplate="<br>".join([
"ColX: %{x}",
"ColY: %{y}",
"Col1: %{customdata[0]}",
"Col2: %{customdata[1]}",
"Col3: %{customdata[2]}",
])
)
Run Code Online (Sandbox Code Playgroud)
这花了大量的试验和错误的搞清楚,因为它是不充分证明,以及之间的矛盾custom_data和customdata令人困惑。
Adi*_*gor 16
我实际上也遇到过类似的问题,相信我,我花了两个半小时才弄清楚。让我们通过一个例子来理解。
fig = make_subplots(rows=1,cols=2,subplot_titles=('First plot','Second plot'),
specs=[[{'type': 'scene'}, {'type': 'scene'}]])
fig.add_trace(go.Scatter3d(x=[0,1,2,3],y=[0,1,2,3],z=[0,1,2,3]), row=1,col=1)
fig.add_trace(go.Scatter3d(x=[0,1,2,3],y=[0,1,2,3], z=[0,1,2,3]), row=1,col=2)
fig.update_layout(title='Add Custom Data')
fig.show()
Run Code Online (Sandbox Code Playgroud)
这将创建两个简单的 scatter3d 图,其中悬停数据是 x、y 和 z 轴。现在您想要将数据添加m=[9,8,7,6,5]到第一个图中。您也可以解析m参数text并添加hovertemplate。
fig.add_trace(go.Scatter3d(x=[0,1,2,3],y=[0,1,2,3],z=[0,1,2,3],
text=[9,8,7,6], hovertemplate='<br>x:%{x}<br>y:%{y}<br>z:%{z}<br>m:%{text}'), row=1,col=1)
Run Code Online (Sandbox Code Playgroud)
这应该可以正常工作。但现在我们想添加一个列表n=[5,6,7,8]到第一个图(或任何图)。customdata这次我们将使用论证。
fig.add_trace(go.Scatter3d(x=[0,1,2,3],y=[0,1,2,3],z=[0,1,2,3],
text=[9,8,7,6],customdata=[5,6,7,8],
hovertemplate='<br>x:%{x}<br>y:%{y}<br>z:%{z}<br>m:%{text}<br>n:%{customdata}'), row=1,col=1)
Run Code Online (Sandbox Code Playgroud)
现在,如果我们想添加第三个自定义数据列表该怎么办?棘手的部分来了。不能解析自定义数据中两个列表的列表,然后调用customdata[0]and customdata[1],没那么简单。我们的第三个清单是k=[2,4,6,8]。
我们需要customdata=[[[5],[2]],[[6],[4]],[[7],[6]],[[8],[8]]]这样的并且它应该工作得很好。基本上,我们需要给出一个单独的列表(或数组),其中每个元素都是您想要显示的所有点的列表。
fig.add_trace(go.Scatter3d(x=[0,1,2,3],y=[0,1,2,3],z=[0,1,2,3],
text=[9,8,7,6],customdata=[[[5],[2]],
[[6],[4]],
[[7],[6]],
[[8],[8]]],
hovertemplate='<br>x:%{x}<br>y:%{y}<br>z:%{z}<br>m:%{text}<br>n:%{customdata[0]}<br>k:%{customdata[1]}'), row=1,col=1)
Run Code Online (Sandbox Code Playgroud)
我们快完成了,但还剩下一件事。像我们在自定义数据中给出的那样手动创建列表需要大量工作,因此我们将使用强大的库将其自动化import numpy as np
n = [5,6,7,8]
k = [2,4,6,8]
nk = np.empty(shape=(4,2,1), dtype='object')
nk[:,0] = np.array(n).reshape(-1,1)
nk[:,1] = np.array(k).reshape(-1,1)
Run Code Online (Sandbox Code Playgroud)
fig.add_trace(go.Scatter3d(x=[0,1,2,3],y=[0,1,2,3],z=[0,1,2,3],
text=[9,8,7,6],customdata=nk,
hovertemplate='<br>x:%{x}<br>y:%{y}<br>z:%{z}<br>m:%{text}<br>n:%{customdata[0]}<br>k:%{customdata[1]}'), row=1,col=1)
Run Code Online (Sandbox Code Playgroud)
轰!如果您想直接从数据帧添加数据,您可以解析df['Column name']代替。np.array(n)
与上面类似,但我更喜欢一次性执行所有命令,始终使用 DataFrame,并坚持使用 Plotly 而不是 Plotly Express:
fig.add_trace(
go.Scatter(
x=group_dfff.Months,
y=group_dfff.Amount,
customdata=group_dfff.PERC_CHANGE,
name=i,
hovertemplate='<br>'.join([
'Price: $%{y:.2f}',
'Week: %{x}',
'Percent Change: %{customdata}',
]),
)
)
Run Code Online (Sandbox Code Playgroud)
另请注意,如果您的 DataFrame 中有多个“自定义数据”字段(例如“A”和“B”),您希望将其包含在悬停数据中,则可以稍微修改上面的内容以包含尽可能多的数据喜欢:
fig.add_trace(
go.Scatter(
x=group_dfff.Months,
y=group_dfff.Amount,
customdata=group_dfff[['A', 'B']],
name=i,
hovertemplate='<br>'.join([
'Price: $%{y:.2f}',
'Week: %{x}',
'Field A: %{customdata[0]}',
'Field B: %{customdata[1]}',
]),
)
)
Run Code Online (Sandbox Code Playgroud)
您可以将自定义数据添加到悬停模板,如下所示:
hovertemplate = 'Price: $%{customdata[0]:.2f}'+'<br>Week: %{customdata[1]} '
+ '<br>Change: %{customdata[2]}'
Run Code Online (Sandbox Code Playgroud)
其中customdata可以是您的group_dfff数据框,也可以是您想要从中获取悬停信息的数据的其他完全不同的数据框。
这是plotly 文档的链接。