Несоответствие в изменении / обновлении меток xtick и меток ytick в Plotly - PullRequest
3 голосов
/ 26 марта 2019

Позвольте мне продемонстрировать на примере. Давайте возьмем простой линейный график, показанный здесь , первая цифра в руководстве пользователя Plotly:

from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
import plotly.graph_objs as go

trace1 = go.Scatter(x=[1,2,3], y=[4,5,6], marker={'color': 'red', 'symbol': 104, 'size': 10}, 
                    mode="markers+lines",  text=["one","two","three"], name='1st Trace')

data=go.Data([trace1])
layout=go.Layout(title="First Plot", xaxis={'title':'x1'}, yaxis={'title':'x2'})
figure1=go.Figure(data=data,layout=layout)
init_notebook_mode(connected=True)
iplot(figure1)

enter image description here

Теперь, скажем, я хочу обновить метки x-tick до 'A', 'B', 'C', а метки ytick - до 'E', 'F', 'G'. Я могу сделать это, обновив рисунок следующим образом:

figure1['data'][0]['x']=['A', 'B', 'C']
figure1['data'][0]['y']=['E', 'F', 'G']

iplot(figure1)

enter image description here

Пока все хорошо. Однако, скажем, я сначала строю фигуру с помощью matplotlib, а затем конвертирую в графически, так:

import matplotlib.pyplot as plt
import plotly.tools as tls

plt.plot([1,2,3], [4,5,6], 'r+-', markersize=10)
plt.xlabel('x2')
plt.ylabel('y2')

mpl_fig = plt.gcf()
figure2 = tls.mpl_to_plotly(mpl_fig)

init_notebook_mode(connected=True)
iplot(figure2)

enter image description here

Это актуально, когда, скажем, библиотека, которую вы используете для построения рисунков, была разработана для работы только с matplotlib (или, возможно, seaborn на максимуме). Но вы хотите сделать графики динамичными / интерактивными и использовать их сюжетно.

На этот раз, если я попытаюсь обновить фигуру точно так же, как и раньше, я получу пустую фигуру!

figure2['data'][0]['x']=['A', 'B', 'C']
figure2['data'][0]['y']=['E', 'F', 'G']

iplot(figure2)

enter image description here

Мало того, что это пустая цифра, метки xtick и ytick также остаются без изменений.

Когда я смотрю глубже в то, что содержится в figure1['data'][0]['x'], я вижу, что это кортеж:

enter image description here

И когда я проверяю, что содержится в figure2['data'][0]['x'], это также точно такой же кортеж:

enter image description here

То же самое относится к figure1['data'][0]['y'] и figure2['data'][0]['y'] - они оба содержат кортеж ('E', 'F', 'G').

Итак, что происходит? Почему figure2 не отображается после обновления меток? Как я могу это исправить?

1 Ответ

1 голос
/ 27 марта 2019

Исправление, которое я нашел до сих пор, работая над собой, - это по существу заменить макет на пустой макет. По какой-то причине компоновка графически построенного графика, преобразованного из matplotlib, кажется, приводит к тому, что обновления рисунка не отражаются. После того, как макет будет пустым (а затем, если потребуется, добавит в него такие вещи, как заголовок и метки осей, как показано ниже), кажется, что он работает нормально:

figure2['layout'] = {'title':'First plot', 'xaxis':{'title':'x2'}, 'yaxis':{'title':'y2'}}

figure2['data'][0]['x']=['A', 'B', 'C']
figure2['data'][0]['y']=['E', 'F', 'G']

iplot(figure2)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...