Несколько следов с одним слайдером в заговоре - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь создать один слайдер, который управляет двумя трассировками, используя Python 3 и Plotly.Я использую Spyder, хотя я также попробовал тот же код, измененный для Jupyter, но безуспешно

Это пример кода:

import numpy as np
#import pandas as pd
#import matplotlib.pyplot as plt

import plotly as py
import plotly.graph_objs as go
#import ipywidgets as widgets

py.offline.init_notebook_mode(connected=True) 



'''
Plot traces
'''
trace1 = [dict(
        type = 'scatter',
        visible = False,
        name='Demand',
        x = np.arange(0,365,1),
        y = np.sin(step*np.arange(0,365,1))) for step in range(0,365,1)]


trace2 = [dict(
        type = 'scatter',
        visible = False,
        name='Demand',
        x = np.arange(0,365,1),
        y = np.sin(step*np.arange(0,365,1)) + 5) for step in range(0,365,1)]


#data = trace2

data = [list(a) for a in zip(trace1, trace2)]


steps = []
for i in range(len(data)):
    step = dict(
        method = 'restyle',  
        args = ['visible', [False] * len(data)],
        label = ""
    )
    step['args'][1][i] = True # Toggle i'th trace to "visible"
    steps.append(step)

sliders = [dict(
    active = 10,#What's happening here?
    currentvalue = {"prefix": "Day: "}, #????
    #pad = {"t": 50},
    steps = steps
)]

#Add styling
layout = go.Layout(sliders=sliders,
    title='Sample slider plot',
    xaxis=dict(
        title=‘Test’,
        titlefont=dict(
            family='Courier New, monospace',
            size=18,
            color='#7f7f7f'
        )
    ),
    yaxis=dict(
        title=‘Unit’,
        titlefont=dict(
            family='Courier New, monospace',
            size=18,
            color='#7f7f7f'
        )
    )
)


fig = go.Figure(data=data, layout=layout)

py.offline.plot(fig, filename='Test3')

Если я строю одну из трасс отдельно, то есть

data = trace1

, она работает.Однако, как только я объединяю trace1 и trace2, то есть

data = [list(a) for a in zip(trace1, trace2)]

, я получаю следующую ошибку:

The 'data' property is a tuple of trace instances
    that may be specified as:
      - A list or tuple of trace instances
        (e.g. [Scatter(...), Bar(...)])
      - A list or tuple of dicts of string/value properties where:
        - The 'type' property specifies the trace type
            One of: ['area', 'bar', 'barpolar', 'box',
                     'candlestick', 'carpet', 'choropleth', 'cone',
                     'contour', 'contourcarpet', 'heatmap',
                     'heatmapgl', 'histogram', 'histogram2d',
                     'histogram2dcontour', 'mesh3d', 'ohlc',
                     'parcats', 'parcoords', 'pie', 'pointcloud',
                     'sankey', 'scatter', 'scatter3d',
                     'scattercarpet', 'scattergeo', 'scattergl',
                     'scattermapbox', 'scatterpolar',
                     'scatterpolargl', 'scatterternary', 'splom',
                     'streamtube', 'surface', 'table', 'violin']

        - All remaining properties are passed to the constructor of
          the specified trace type

        (e.g. [{'type': 'scatter', ...}, {'type': 'bar, ...}])

Проверка типа (trace1) показывает, что каждая трасса представляет собой список из 365 объектов dict,с которым сюжетно справиться.Однако, как только я объединяю трассировки в объект «данные», как описано выше, я получаю список списков, которые он не может.

Итак, мой вопрос: как мне скомбинировать trace1 и trace2 в объект, который имеет правильную длину для шагов ползунка (т.е. 365) и с которым может плотно работать - например, список диктов илиэкземпляры трассировки, а не список списков?

Я смотрел на сюжетно - несколько трассировок с использованием общей переменной ползунка , а также Plot.ly.Использование ползунка с несколькими участками .К сожалению, успеха не было.Первая ссылка работает, если объекты трассировки являются диктатами, но не в том случае, если вам нужно заключить их в квадратные скобки, чтобы создать список для цикла for.Вторая ссылка просто добавляет trace1 + trace2 для создания объекта с длиной индекса 730, то есть последовательно соединяет две трассы, а не отображает их вместе.

Заранее большое спасибо за помощь!

...