Python Plotly:使用按钮更新子图集并任意分配迹线

时间:2018-12-19 23:23:07

标签: python python-3.x plotly

假设我有6组数据:

X = [i for i in range(100)]
Y1 = [2*i for i in range(100)]
Y2 = [3*i for i in range(100)]
Y3 = [4*i for i in range(100)]
Y4 = [5*i for i in range(100)]
Y5 = [6*i for i in range(100)]
Y6 = [7*i for i in range(100)]

使用此处的示例(https://plot.ly/python/custom-buttons/),我可以创建按钮,这些按钮将允许我在单个图上显示这六组数据之间进行切换。但是,我想将数据分为多个子图集,并具有在子图集之间切换的按钮。

例如,我想要两组子图,每个子图由两个子图组成(因此,总共4个地块,两组,每个2个子图)。在第一组子图中,我想将Y1和Y2放在第一个图上,并将Y3放在第二个图上。在第二组子图中,我想在第一个子图上放置Y4,在第二个子图上放置Y5和Y6。然后,我想要两个按钮,这些按钮可让我在第一组子图(Y1 / Y2和Y3)和第二组子图(Y4,Y5 / Y6)之间切换。

另一个示例是拥有两组子图,分别由2个子图和3个子图组成(而不是每组2个子图)。在第一组子图中(2个子图中),将Y1放在第一组上,将Y2放在第二组上。在第二组子图中(3个子图中),将Y3和Y4放在第一个子图上,将Y5放在第二个子图上,将Y6放在第三个子图上。这两个按钮将在第一组和第二组子图之间更新。

最终目标是要有一个基础,即拥有任意数量的子图集,并为每个子图集分配任意数量的子图(不相同),然后将任意数量的迹线任意分配给每组子图中的每个子图。 ,然后使用按钮在子图集之间切换。

如果没有按钮,是否可以通过菜单来完成?另外,是否存在一个菜单小部件,该菜单小部件允许使用向上/向下按钮浏览子图集?

可以在这里找到另一种类似的参考文献(但没有一个能解决这个特定问题):Python Plotly - Multiple dropdown plots, each of which have subplots

下面是我一直在尝试开发的代码(当然,它是不完整的,但是可以作为解决方案的基础。)

非常感谢您的答复!

import pandas as pd
import numpy as np
import plotly.offline as offline
import plotly.graph_objs as go
from plotly.offline import init_notebook_mode, iplot, plot
from plotly import tools
init_notebook_mode(connected=True)

# 6 sets of data
X = [i for i in range(100)]
Y1 = [2*i for i in range(100)]
Y2 = [3*i for i in range(100)]
Y3 = [4*i for i in range(100)]
Y4 = [5*i for i in range(100)]
Y5 = [6*i for i in range(100)]
Y6 = [7*i for i in range(100)]
labels = ["One", "Two"]

# 2 subplots
fig = tools.make_subplots(rows=1, cols=2)

trace1 = go.Scatter(
                x=X,
                y=Y1, 
                showlegend=False
            )
trace2 = go.Scatter(
                x=X,
                y=Y2, 
                showlegend=False
            )
trace3 = go.Scatter(
                x=X,
                y=Y3, 
                showlegend=False
            )
trace4 = go.Scatter(
                x=X,
                y=Y4, 
                showlegend=False
            )
trace5 = go.Scatter(
                x=X,
                y=Y5, 
                showlegend=False
            )
trace6 = go.Scatter(
                x=X,
                y=Y6, 
                showlegend=False
            )

data = [trace1,trace2]

updatemenus = list([
    dict(type="buttons",
         active=-1,
         buttons = list([
             dict(label = 'first',
                  method = 'update',
                  args = [{'visible':[True,False]},
                           {'title': 'first'}]),
             dict(label = 'second',
                  method = 'update',
                  args = [{'visible':[False,True]},
                           {'title': 'second'}])
        ])
    )])

layout = dict(title = 'test', showlegend=False,
              updatemenus=updatemenus)

fig = dict(data=data,layout=layout)

offline.plot(fig, filename='tmp.html')

1 个答案:

答案 0 :(得分:0)

请检查文档(this link

在文档中,他们用来附加的示例是使用fig.append_trace(),第一个参数是已经生成的跟踪,第二个和第三个是子图的位置。

fig = tools.make_subplots(rows=1, cols=2)

fig.append_trace(trace1, 1, 1)
fig.append_trace(trace2, 1, 2)