Как добавить ось для второй трассы на подзаголовке Plotly?

У меня есть три следа, одна из которых у меня на одном участке, а две - на другом. Я хотел бы иметь отдельную ось Y для каждой трассы на подзаголовке с двумя трассами.

Например, у меня есть

fig = plotly.tools.make_subplots(rows=2, cols=1, shared_xaxes=True)
fig.append_trace(trace1, 1, 1)
fig.append_trace(trace2, 1, 1)
fig.append_trace(trace3, 2, 1)
fig['layout'].update(height=200, width=400)

который производит

введите здесь описание изображения

И когда у меня нет подзаголовков, я могу получить вторую ось для второй трассы с помощью

layout = go.Layout(
    yaxis=dict(
        title='y for trace1'
    ),
    yaxis2=dict(
        title='y for trace2',
        titlefont=dict(
            color='rgb(148, 103, 189)'
        ),
        tickfont=dict(
            color='rgb(148, 103, 189)'
        ),
        overlaying='y',
        side='right'
    )
)
fig = go.Figure(data=data, layout=layout)

который производит

введите здесь описание изображения

Но я не могу понять, как сделать так, чтобы первая часть графика в первом примере выглядела так, как график во втором примере: с отдельной осью для второй трассы.

Как добавить ось для второй трассы на подзаголовке Plotly?


person orome    schedule 27.07.2016    source источник


Ответы (1)


Это своего рода обходной путь, но, похоже, он работает:

import plotly as py
import plotly.graph_objs as go
from plotly import tools
import numpy as np

left_trace = go.Scatter(x = np.random.randn(1000), y = np.random.randn(1000), yaxis = "y1", mode = "markers")
right_traces = []
right_traces.append(go.Scatter(x = np.random.randn(1000), y = np.random.randn(1000), yaxis = "y2", mode = "markers"))
right_traces.append(go.Scatter(x = np.random.randn(1000) * 10, y = np.random.randn(1000) * 10, yaxis = "y3", mode = "markers"))

fig = tools.make_subplots(rows = 1, cols = 2)
fig.append_trace(left_trace, 1, 1)
for trace in right_traces:
  yaxis = trace["yaxis"] # Store the yaxis
  fig.append_trace(trace, 1, 2)
  fig["data"][-1].update(yaxis = yaxis) # Update the appended trace with the yaxis

fig["layout"]["yaxis1"].update(range = [0, 3], anchor = "x1", side = "left")
fig["layout"]["yaxis2"].update(range = [0, 3], anchor = "x2", side = "left")
fig["layout"]["yaxis3"].update(range = [0, 30], anchor = "x2", side = "right", overlaying = "y2")

py.offline.plot(fig)

Производит это, где trace0 находится в первом подзаголовке, построенном на yaxis1, а trace1 и trace2 находятся во втором подзаголовке, построенном на yaxis2 (0-3) и yaxis3 (0-30) соответственно:  введите описание изображения здесь < / а>

Когда трассировки добавляются к подзаголовкам, оси x и y кажутся перезаписанными, или это мое понимание это обсуждение в любом случае.

person user2950747    schedule 07.03.2017