繁体   English   中英

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

[英]Python Plotly: use buttons to update sets of subplots & arbitrarily assign traces

假设我有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组,每个子图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-多个下拉图,每个图都有子图

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

非常感谢您的回复!

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')

请检查文档( 此链接

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM