Проблема с добавлением в трассировку к рисунку Plotly, преобразованному из Matplotlib - PullRequest
2 голосов
/ 28 июня 2019

Я пытаюсь добавить новую трассировку рассеяния в соответствии с инструкциями на этой веб-странице: https://plot.ly/matplotlib/modifying-a-matplotlib-figure/

Однако, когда я пытаюсь запустить следующий код:

plotly_fig['data'].append( dict(x=x, y=logx, type='scatter', mode='lines') )

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

plotly_fig['data'].append( dict(x=x, y=logx, type='scatter', mode='lines') ) AttributeError: 'tuple' object has no attribute 'append'

Пока я пробовал:

1.) plotly_fig.update(data=dict(x=x, y=logx, type='scatter', mode='lines'))

который, похоже, ничего не делает.

2.) plotly_fig.add_scatter(name= "test", mode='lines', xaxis='x', yaxis='y',x=x.tolist(), y=sinx.tolist(), line= {'color': 'rgba (31, 119, 180, 1)', 'dash': 'solid', 'width': 1.5})

, который, кажется, добавляет в след, но когда я запускаю:

py.plot(plotly_fig, filename='test.html')

новый след не строится.

3.) new_trace = dict(type='scatter', x=x, y=sinx, mode='lines', line= {'color': 'rgba (31, 119, 180, 1)', 'dash': 'solid', 'width': 1.5})

plotly_fig.append_trace(new_trace, 0, 0)

, который возвращает ошибку: «Чтобы сослаться на трассы по строкам и столбцам, сначала необходимо использовать plotly.tools.make_subplots, чтобы создать фигуру с сеткой подзаговоров».

Вот мой полный код с обоими методами, упомянутыми выше, закомментирован.

import pprint
import matplotlib.pyplot as plt
import plotly.offline as py
import plotly.tools as tls
import plotly.graph_objs as go

x =  np.linspace(np.pi, 3*np.pi, 1000)
sinx = np.sin(x)
logx = np.log(x)


fig, ax = plt.subplots(figsize=(5,6))
ax.plot(x, logx)
ax.set_title('Two Curves')


plotly_fig = tls.mpl_to_plotly(fig)`
pp = pprint.PrettyPrinter(indent=4)`
pp.pprint(plotly_fig)`

plotly_fig['data'].append( dict(x=x, y=logx, type='scatter', mode='lines') )

#plotly_fig.update(data=dict(x=x, y=logx, type='scatter', mode='lines'))

#plotly_fig.add_scatter(name= "test", mode='lines', xaxis='x', yaxis='y',x=x.tolist(), y=sinx.tolist(), line= {'color': 'rgba (31, 119, 180, 1)', 'dash': 'solid', 'width': 1.5})

#new_trace = dict(type='scatter', x=x, y=sinx, mode='lines', line= {'color': 'rgba (31, 119, 180, 1)', 'dash': 'solid', 'width': 1.5})
    #plotly_fig.append_trace(new_trace, 0, 0)

pp.pprint(plotly_fig)

py.plot(plotly_fig, filename='test.html')

1 Ответ

0 голосов
/ 29 июня 2019

Похоже, что используемый вами пример кода устарел с тех пор, как plotly 3.0 переключился на представление данных рисунка в виде кортежа вместо списка.Поскольку кортежи являются неизменяемыми, вы получили ошибку, которую вы описали.

См. Документы: https://github.com/plotly/plotly.py/blob/master/migration-guide.md#migration-to-version-3

Итак, измените строку

plotly_fig['data'].append( dict(x=x, y=logx, type='scatter', mode='lines') )

на:

plotly_fig.add_trace(dict(x=x, y=logx, type='scatter', mode='lines'))
...