首页 > 解决方案 > 使用按钮属性使用 fig.update 更新跟踪的可见性?

问题描述

使用 fig.update_layout Plotly 更新跟踪的可见性之后,我想使用 update_layout 预先设置跟踪的可见性,以匹配第一个按钮的状态。

由于我在上一个问题中给出的示例过于简单,@jayveesea 的正确 asnwer 不适用于我的情况:我无法从 trace.name 更新,而是需要从按钮名称更新。我创建了一个新示例:

我有一个带有“像素”、“VGs”、“x”、“y”的数据框。

我正在用可见 = False 绘制所有痕迹。然后我想更新绘图,以便所有像素 = 1 的痕迹都可见。(基本上就像按下按钮 1 一样)

这是一个新的完整工作示例:

import pandas as pd
import numpy as np
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots


df = pd.DataFrame ({"pixel":[1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3],
                    "VGs":   [1,1,1,1,2,2,2,2,1,1,1,1,2,2,2,2,1,1,1,1,2,2,2,2],
                    "x":    [1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4],
                    "y":    [2,4,6,8,4,8,12,16,3,9,27,81,6,18,54,162,4,12,75,200,8,24,150,400]
                    
                    })

 #make Vis/invis buttons for pixels 
buttons=[]
pixels = df.pixel.unique()
for pixel in pixels : 
  vis = list(np.isin(pixels,pixel ))
  dict_ = dict(method='restyle',
          label="pixel " +str(pixel),
          visible=True,
          args=[{'label': "pixel " +str(pixel),
                       'visible':vis,
                      }
                     ])
 
 
  buttons.append(dict_)


um = [{'buttons':buttons,
      'direction': 'down'}
      ]

 #color map
VG_distinct_colors ={}
distinc_color = ['#e6194b', '#3cb44b', '#ffe119', '#4363d8', '#f58231', '#911eb4', '#46f0f0']
for indx, VG in enumerate(list(df['VGs'].unique())):
  VG_distinct_colors[VG] =distinc_color[indx] 

 #start figure
fig = make_subplots(specs=[[{"secondary_y": True}]])
 #In legend show VG, button update change Pixel
for (VG, pixel), grp in df.groupby (["VGs", "pixel"]):
  fig.add_trace(go.Scatter(x=grp["x"], y=grp["y"], legendgroup=str(VG), visible = False,mode='lines', name = str(VG), line_color=VG_distinct_colors[VG],
                           ),   col=1, row=1)



fig.update_layout(updatemenus=um)

### SOMETHING HERE LIKE 
**fig.update_layout(Traces that are related to Button 1 are visible)**

fig.show()

标签: pythonpandasplotly

解决方案


推荐阅读