• <bdo id='RqWIU'></bdo><ul id='RqWIU'></ul>
    <tfoot id='RqWIU'></tfoot>
    1. <legend id='RqWIU'><style id='RqWIU'><dir id='RqWIU'><q id='RqWIU'></q></dir></style></legend>

      <i id='RqWIU'><tr id='RqWIU'><dt id='RqWIU'><q id='RqWIU'><span id='RqWIU'><b id='RqWIU'><form id='RqWIU'><ins id='RqWIU'></ins><ul id='RqWIU'></ul><sub id='RqWIU'></sub></form><legend id='RqWIU'></legend><bdo id='RqWIU'><pre id='RqWIU'><center id='RqWIU'></center></pre></bdo></b><th id='RqWIU'></th></span></q></dt></tr></i><div id='RqWIU'><tfoot id='RqWIU'></tfoot><dl id='RqWIU'><fieldset id='RqWIU'></fieldset></dl></div>

      <small id='RqWIU'></small><noframes id='RqWIU'>

      1. Plotly:更新菜单的按钮如何真正起作用?

        Plotly: How do the buttons for the update menus really work?(Plotly:更新菜单的按钮如何真正起作用?)
          <tbody id='wDqdG'></tbody>
      2. <i id='wDqdG'><tr id='wDqdG'><dt id='wDqdG'><q id='wDqdG'><span id='wDqdG'><b id='wDqdG'><form id='wDqdG'><ins id='wDqdG'></ins><ul id='wDqdG'></ul><sub id='wDqdG'></sub></form><legend id='wDqdG'></legend><bdo id='wDqdG'><pre id='wDqdG'><center id='wDqdG'></center></pre></bdo></b><th id='wDqdG'></th></span></q></dt></tr></i><div id='wDqdG'><tfoot id='wDqdG'></tfoot><dl id='wDqdG'><fieldset id='wDqdG'></fieldset></dl></div>
      3. <legend id='wDqdG'><style id='wDqdG'><dir id='wDqdG'><q id='wDqdG'></q></dir></style></legend>

              <bdo id='wDqdG'></bdo><ul id='wDqdG'></ul>

            • <small id='wDqdG'></small><noframes id='wDqdG'>

                <tfoot id='wDqdG'></tfoot>

                • 本文介绍了Plotly:更新菜单的按钮如何真正起作用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我为什么想知道?

                  这似乎是一个非常简单的问题,但我在使用下拉菜单编辑具有多条轨迹的图形时遇到了一些困难,所以我真的很想确保我了解 plotlys 下拉菜单的内部工作原理,更新菜单和按钮 100% 正确.因此,如果有人能抽出时间来看看下面的示例,那就太好了.

                  This may seem like a very simple question, but I'm having some difficulties editing figures with multiple traces using dropdownmenus, so I'm really eager to make sure that I'm understanding the inner workings of plotlys dropdown menus, update menus and buttons 100% correct. So it would be great if someone could find the time to take a look at the example below.

                  有什么问题?

                  考虑以下由以下代码片段生成的简单图形:

                  Consider the following simple plotly figure produced by the code snippet below:

                  情节1:

                  代码 1:

                  # imports
                  import plotly.graph_objs as go
                  import pandas as pd
                  import numpy as np
                  
                  # data
                  df1 = pd.DataFrame({'index': ['1','2','3'], 'A': [10,10,12], 'B': [11,11,11]})
                  df2 = pd.DataFrame({'index': ['1','2','3'], 'A': [10,10,10], 'B': [11,11,12]})
                  
                  # plotly figure setup
                  fig=go.Figure()
                  fig.add_trace(go.Scatter(x=df1['index'], y=df1['A'], mode='lines'))
                  fig.add_trace(go.Scatter(x=df1['index'], y=df1['B'], mode='lines'))
                  
                  #f=fig.to_dict()
                  fig.show()
                  

                  现在我想用 df2['A']=[10 替换蓝线 df1['A']=[10,10,12] 的数据,10,10],同时将红线df1['B']=[11,11,11]的数据替换为df1['B']=[11,11,11].

                  Now I'd like to replace the data for the blue line df1['A']=[10,10,12] with df2['A']=[10,10,10], and at the same time replace the data for the red line df1['B']=[11,11,11] with df1['B']=[11,11,11].

                  我可以通过引入这样的下拉菜单轻松做到这一点:

                  And I can easily do so by introducing a dropdown menu like this:

                  情节 2 - 下拉菜单 = df1:

                  情节 3 - 下拉菜单 = df2

                  代码 2 - 与代码 1 相同,但添加了菜单:

                  # imports
                  import plotly.graph_objs as go
                  import pandas as pd
                  import numpy as np
                  
                  # data
                  df1 = pd.DataFrame({'index': ['1','2','3'], 'A': [10,10,12], 'B': [11,11,11]})
                  df2 = pd.DataFrame({'index': ['1','2','3'], 'A': [10,10,10], 'B': [11,11,12]})
                  
                  # plotly figure setup
                  fig=go.Figure()
                  fig.add_trace(go.Scatter(x=df1['index'], y=df1['A'], mode='lines'))
                  fig.add_trace(go.Scatter(x=df1['index'], y=df1['B'], mode='lines'))
                  
                  f=fig.to_dict()
                  #fig.show()
                  
                  buttons=list([dict(args=[{'y':[df1['A'],df1['B']],
                                             #'type':'scatter',
                                          }],
                                      
                                     label="df1",
                                     method="restyle"
                                  ),
                                  dict(args=[{'y':[df2['A'], df2['B']],
                                             #'type':'scatter',
                                             #'mode':'markers'
                                            }],
                                      
                                      label="df2",
                                      method="restyle"
                                  )
                              ])
                  
                  fig.update_layout(
                      updatemenus=[
                          go.layout.Updatemenu(
                              buttons=buttons,
                              direction="down",
                              pad={"r": 10, "t": 10},
                              showactive=True,
                              x=-0.25,
                              xanchor="left",
                              y=1,
                              yanchor="top"
                          ),
                      ]
                  )
                  
                  fig.show()
                  


                  它是如何工作的?

                  现在让我们看一下在引入下拉菜单之前该图的结构.我们可以通过查看变量 f=fig.to_dict() 来做到这一点.这是该字典的最上面几行:

                  Now let's take a look at how the figure was structured before the dropdown menu was introduced. We can do so by lookingat the variable f=fig.to_dict(). Here are the top lines of that dict:

                    {'data': [{'mode': 'lines',
                     'x': array(['1', '2', '3'], dtype=object),
                     'y': array([10, 10, 12], dtype=int64),
                     'type': 'scatter'},
                    {'mode': 'lines',
                     'x': array(['1', '2', '3'], dtype=object),
                     'y': array([11, 11, 11], dtype=int64),
                     'type': 'scatter'}]
                  

                  这里可以看到'y'出现了两次:

                  Here you can see that 'y' appears twice:

                  # 1
                  'y': array([10, 10, 12], dtype=int64),
                  
                  # 2
                  'y': array([10, 10, 12], dtype=int64),
                  

                  这让我有点困惑,因为我们可以通过仅引用 both 来更改 y 的值一次进入下拉菜单中的按钮:

                  And this leaves me a bit puzzled, since we're able to change both values for y by only referencing it once int the button in the dropdown menu:

                  # from the snippet Code 2 above:
                  dict(args=[{'y':[df2['A'], df2['B']]}]
                  


                  最后,主要问题:

                  现在很明显,它的工作方式是更新菜单从按钮中获取 y 的值,查找每个 'y' 键 将列表[df2['A'], df2['B']]中的元素一一插入,只要有ys 来填写.但这真的是这里发生的事情吗?如果你们中的任何人能够提供一个自信的'YES',我会很高兴,但我真的希望有一个自信的'NO'和一个很少有关于这些东西是如何真正组合在一起的细节.

                  Now it seems very apparent that the way this works is that the updatemenu takes the value for y from the button, looks up every 'y' key in the figure and inserts the elements in the list [df2['A'], df2['B']] one by one as long as there are ys to fill. But is that really exactly what's happening here? If any of you are able to deliver a confident 'YES' I'd be quite happy with that, but I'm really hoping for a confident 'NO' and a few details on how these things are really put together.

                  推荐答案

                  好问题!真正的工作原理是使用 method 属性指定要应用的底层 plotly.js Javascript 函数的名称,其参数来自 <代码>参数.所以你实际上是在调用 JS 函数 Plotly.restyle(<fig>, {'y': <whatever>}).这意味着您正在寻找的文档在这里:https://plot.ly/javascript/plotlyjs-function-reference/ 更具体地说是 restyle 函数,这里是 https://plot.ly/javascript/plotlyjs-function-reference/#plotlyrestyle

                  Great question! How things really work is that with the method attribute you're specifying the name of the underlying plotly.js Javascript function you want to apply, and its arguments are drawn from args. So you're really calling the JS function Plotly.restyle(<fig>, {'y': <whatever>}). This means that the documentation you're seeking is here: https://plot.ly/javascript/plotlyjs-function-reference/ and more specifically the restyle function which is here https://plot.ly/javascript/plotlyjs-function-reference/#plotlyrestyle

                  如你所见:

                  注意,未指定跟踪索引假定您要重新设置所有跟踪的样式.

                  Note, leaving the trace indices unspecified assumes that you want to restyle all the traces.

                  这篇关于Plotly:更新菜单的按钮如何真正起作用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  Adding config modes to Plotly.Py offline - modebar(将配置模式添加到 Plotly.Py 离线 - 模式栏)
                  Plotly: How to style a plotly figure so that it doesn#39;t display gaps for missing dates?(Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙?)
                  python save plotly plot to local file and insert into html(python将绘图保存到本地文件并插入到html中)
                  Plotly: What color cycle does plotly express follow?(情节:情节表达遵循什么颜色循环?)
                  How to save plotly express plot into a html or static image file?(如何将情节表达图保存到 html 或静态图像文件中?)
                  Plotly: How to make a line plot from a pandas dataframe with a long or wide format?(Plotly:如何使用长格式或宽格式的 pandas 数据框制作线图?)
                    <bdo id='AiG0g'></bdo><ul id='AiG0g'></ul>
                  • <legend id='AiG0g'><style id='AiG0g'><dir id='AiG0g'><q id='AiG0g'></q></dir></style></legend>
                      <tbody id='AiG0g'></tbody>

                    <small id='AiG0g'></small><noframes id='AiG0g'>

                      <tfoot id='AiG0g'></tfoot>
                          • <i id='AiG0g'><tr id='AiG0g'><dt id='AiG0g'><q id='AiG0g'><span id='AiG0g'><b id='AiG0g'><form id='AiG0g'><ins id='AiG0g'></ins><ul id='AiG0g'></ul><sub id='AiG0g'></sub></form><legend id='AiG0g'></legend><bdo id='AiG0g'><pre id='AiG0g'><center id='AiG0g'></center></pre></bdo></b><th id='AiG0g'></th></span></q></dt></tr></i><div id='AiG0g'><tfoot id='AiG0g'></tfoot><dl id='AiG0g'><fieldset id='AiG0g'></fieldset></dl></div>