Я думаю, что вы неправильно поняли понятие подзаговоров, причина, по которой вы получаете ошибку, заключается в том, что функция make_subplots()
создаст собственный объект layout
, следовательно, вы получаете ошибку.
'layout' is not allowed in 'scatter'
Path To Error: ['data'][0]['layout']
Правильный способ изменить компоновку субплота - создать субплот, получить доступ к свойствам отдельного объекта и установить их, как показано ниже.
updatemenus = list([
dict(active=-1,
x=-0.15,
buttons=buttons
)
])
fig['layout']['title'] = 'Title'
fig['layout']['showlegend'] = False
fig['layout']['updatemenus'] = updatemenus
Также вы создаете новый объект субплотакаждый раз при запуске цикла for, который неправильный .Я говорю о приведенной ниже строке.
traces = []
for data in datas:
fig = tools.make_subplots(rows=1, cols=2)
Вам нужно назначить его только один раз, пожалуйста, обратитесь к приведенному ниже рабочему примеру и попробуйте реализовать тот же метод в вашем сценарии использования.
import plotly.offline as py
import plotly.graph_objs as go
from plotly.offline import init_notebook_mode, iplot, plot
from plotly import tools
init_notebook_mode(connected=True)
df = pd.DataFrame([[1, 2], [3, 4], [5, 6], [7, 8]], columns=["A", "B"])
labels = ["A", "B"]
datas = [df, df]
### Create individual figures
# START
fig = tools.make_subplots(rows=2, cols=2)
for i, data in enumerate(datas):
trace1 = go.Bar(
x=data.head(10).A,
y=data.head(10).B,
showlegend=False
)
trace2 = go.Bar(
x=data.tail(10).A,
y=data.tail(10).B,
showlegend=False
)
fig.append_trace(trace1, i + 1, 1)
fig.append_trace(trace2, i + 1, 2)
### Create buttons for drop down menu
buttons = []
for i, label in enumerate(labels):
visibility = [i==j for j in range(len(labels))]
button = dict(
label = label,
method = 'update',
args = [{'visible': visibility},
{'title': label}])
buttons.append(button)
updatemenus = list([
dict(active=-1,
x=-0.15,
buttons=buttons
)
])
fig['layout']['title'] = 'Title'
fig['layout']['showlegend'] = False
fig['layout']['updatemenus'] = updatemenus
iplot(fig, filename='dropdown')
Пожалуйста, дайте мне знать, если это решит вашу проблему!