具有交互功能的循环函数



Python/Plotly中的新功能,我正在尝试使用plotly"优化"交互式绘图

以下是DF

Date    AA  AQ  AS  B6  CO  DH  DL  EV  F9  FL  HA  HP  MQ  NW  OH  OO  TZ  UA  US  WN  XE  YV  DayofMonth  Month
27/12   5.0 0.0 2.0 6.0 3.0 NaN 2.0 6.0 2.0 2.0 0.0 1.0 4.0 5.0 1.0 9.0 0.0 5.0 5.0 17.0    1.0 2.0 27  12
28/12   8.0 0.0 3.0 2.0 0.0 1.0 6.0 4.0 1.0 3.0 1.0 0.0 5.0 3.0 1.0 3.0 0.0 6.0 4.0 19.0    6.0 0.0 28  12
29/12   2.0 NaN 1.0 NaN 1.0 0.0 11.0    4.0 4.0 1.0 0.0 1.0 4.0 6.0 2.0 4.0 0.0 6.0 3.0 13.0    6.0 2.0 29  12


import plotly.graph_objects as go

# Initialize figure
fig = go.Figure()
df= pivot_gp.copy()
# Add Traces
for col in ['AA',   'AQ',   'AS',   'B6',   'CO',   'DH',   'DL',   'EV',   'F9',   'FL',   'HA',   'HP',   'MQ',   'NW',   'OH',   'OO',   'TZ',   'UA',   'US',   'WN',   'XE',   'YV']:
fig.add_trace(go.Scatter(x= list(df.Date), y= list(df[col]), name= f"{col}", line= dict(color="red")))

fig.update_layout(updatemenus=[dict(active= 0, 
buttons=list([dict(label= "None",
method= "update",
args= [{"visible": [False, False, False, False, False, False, False, False, False, False, False,
     False,False, False, False, False, False, False, False, False, False, False]}, {"title": "Unique Carriers"}]),
dict(label= "AA",
method= "update", 
args= [{"visible": [True, False, False, False, False, False, False, False, False, False, False,
     False,False, False, False, False, False, False, False, False, False, False]}, {"title": "Unique Carrier: AA"}]),
dict(label= "AQ", 
method= "update", 
args= [{"visible": [False, True, False, False, False, False, False, False, False, False, False,
     False,False, False, False, False, False, False, False, False, False, False]}, {"title": "Unique Carrier: AQ"}]), 
dict(label= "All", 
method= "update", 
args= [{"visible": [True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True]}, 
{"title": "Unique Carriers"}]),
]), ) ])

如您所见,我已经能够创建一个循环来迭代列并在交互式绘图中添加一条线。但是,我在更新功能方面遇到了问题。

问题:

我如何创建一个循环来遍历所有列,并在它是正确的列时添加 True,例如:

for col in [cols]:
fig.update_layout(updatemenus=[dict(active= 0, 
buttons=list([dict(label= f"{col}",
method= "update", 
args= [{"visible": [True, False, False, False, False, False, False, False, False, False, False,
             False,False, False, False, False, False, False, False, False, False, False]}, {"title": "Unique Carrier: f'{col}'"}]),

挑战在 args 列表中,同时循环:

  • col 1 必须为真,然后全部为假
  • col 2 假,真,然后全部假
  • col 3 假,假,
  • 真,然后都是假的
  • 等等...

奖励问题:只是为了让它"漂亮",在第一个循环中,我如何更改每列的颜色:

line= dict(color="red")

感谢任何人的帮助!

也许它可以帮助你:

  1. 取代

    for col in ['AA',   'AQ',   'AS',   'B6',   'CO',   'DH',   'DL',   'EV',   'F9',   'FL',   'HA',   'HP',   'MQ',   'NW',   'OH',   'OO',   'TZ',   'UA',   'US',   'WN',   'XE',   'YV']:
    

    for col in df.columns:
    
  2. 要更改可见列表,您可以尝试:

    "visible":[ x==col for x in df.columns]
    
  3. 对于颜色,您可以设置字典:

    color_dict = { 'AA':"red", 'AQ':"blue", 'AS:"green"} 
    line = dict(color = color_dict.get(col))
    

最新更新