Неожиданное поведение от `specs` в` plotly.subplots.make_subplots - PullRequest
0 голосов
/ 02 декабря 2019

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

from plotly.subplots import make_subplots
import plotly.graph_objects as go

fig = make_subplots(
    rows=2, cols=2,
    specs=[[{}, {}],
           [{"colspan": 2}, None]],
    subplot_titles=("First Subplot","Second Subplot", "Third Subplot"))

fig.add_trace(go.Scatter(x=[1, 2], y=[1, 2]),
                 row=1, col=1)

fig.add_trace(go.Scatter(x=[1, 2], y=[1, 2]),
                 row=1, col=2)
fig.add_trace(go.Scatter(x=[1, 2, 3], y=[2, 1, 2]),
                 row=2, col=1)

fig.update_layout(showlegend=False, title_text="Specs with Subplot Title")
fig.show()

, который генерирует следующий график:

enter image description here

Я пытаюсь поместить Third Subplot в верхнем ряду и First Subplot и Second Subplot во втором ряду. Я использую следующий код (идентичный предыдущему фрагменту, с соответствующим изменением только опции specs):

from plotly.subplots import make_subplots
import plotly.graph_objects as go

fig = make_subplots(
    rows=2, cols=2,
    specs=[[{"colspan": 2}, None],
           [{}, {}]],
    subplot_titles=("First Subplot","Second Subplot", "Third Subplot"))

fig.add_trace(go.Scatter(x=[1, 2], y=[1, 2]),
                 row=1, col=1)

fig.add_trace(go.Scatter(x=[1, 2], y=[1, 2]),
                 row=1, col=2)
fig.add_trace(go.Scatter(x=[1, 2, 3], y=[2, 1, 2]),
                 row=2, col=1)

fig.update_layout(showlegend=False, title_text="Specs with Subplot Title")
fig.show()

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

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-116-cab6bb97a5c7> in <module>
     11 
     12 fig.add_trace(go.Scatter(x=[1, 2], y=[1, 2]),
---> 13                  row=1, col=2)
     14 fig.add_trace(go.Scatter(x=[1, 2, 3], y=[2, 1, 2]),
     15                  row=2, col=1)

~/path/lib/python3.6/site-packages/plotly/basedatatypes.py in add_trace(self, trace, row, col, secondary_y)
   1613             rows=[row] if row is not None else None,
   1614             cols=[col] if col is not None else None,
-> 1615             secondary_ys=[secondary_y] if secondary_y is not None else None,
   1616         )
   1617 

~/path/lib/python3.6/site-packages/plotly/basedatatypes.py in add_traces(self, data, rows, cols, secondary_ys)
   1711         if rows is not None:
   1712             for trace, row, col, secondary_y in zip(data, rows, cols, secondary_ys):
-> 1713                 self._set_trace_grid_position(trace, row, col, secondary_y)
   1714 
   1715         # Make deep copy of trace data (Optimize later if needed)

~/path/lib/python3.6/site-packages/plotly/basedatatypes.py in _set_trace_grid_position(self, trace, row, col, secondary_y)
   1792         grid_ref = self._validate_get_grid_ref()
   1793         return _set_trace_grid_reference(
-> 1794             trace, self.layout, grid_ref, row, col, secondary_y
   1795         )
   1796 

~/path/lib/python3.6/site-packages/plotly/subplots.py in _set_trace_grid_reference(trace, layout, grid_ref, row, col, secondary_y)
   1317             """
   1318 No subplot specified at grid position ({row}, {col})""".format(
-> 1319                 row=row, col=col
   1320             )
   1321         )

ValueError: 
No subplot specified at grid position (1, 2)

У меня естьпробовал разные варианты для specs и они работали, но этот я не могу заставить работать. Неправильно ли я предоставляю аргументы или это может быть известная проблема с plotly?

1 Ответ

1 голос
/ 02 декабря 2019

Мне кажется правильным сообщение об ошибке No subplot specified at grid position (1, 2): теперь у вас есть один двухстрочный график в первой строке, но вы пытаетесь добавить трассировку к row=1, col=2 ... Возможно, вы хотите изменить этолиния к цели row=2, col=2, если вы поменялись местами в исходной спецификации.

...