Многоплоскостные временные ряды

#python #pandas #plotly #plotly-python

Вопрос:

Мне нужна помощь в построении интерактивных диаграмм временных рядов с несколькими линиями в каждом подзаголовке. Мои данные выглядят так:

 import pandas as pd df1 = pd.DataFrame(np.random.randint(100, size=(100,6)), columns=['A_red', 'A_blue', 'B_red', 'B_blue', 'C_red', 'C_blue'])  

Далее я хочу сделать:

 import plotly.express as px fig1 = px.line(df, y=['A_red', 'A_blue'], color=['red', 'blue']) fig2 = px.line(df, y=['B_red', 'B_blue'], color=['red', 'blue']) fig3 = px.line(df, y=['C_red', 'C_blue'], color=['red', 'blue'])  figs = [fig1, fig2, fig3] figs.show()  

Я не могу загрузить какой-либо график в spyder (встроенный или на вкладке графики), а также как сопоставить цвета с разными линиями?

Спасибо

Ответ №1:

Spyder не поддерживает интерактивные графики. У вас есть 2 варианта отображения графиков: либо показать их в браузере, либо отобразить в виде статических графиков. Чтобы отобразить их в браузере, где они будут интерактивными:

 import plotly.io as pio pio.renderers.default = 'browser'  

Чтобы отобразить их на панели графики Spyder в виде статической диаграммы:

 import plotly.io as pio pio.renderers.default = 'svg'  

Вам нужно удалить аргумент color из px.line() вызовов, иначе он выдаст ошибку. Учитывая способ форматирования ваших данных, вы не сможете легко использовать аргумент цвета. Чтобы изменить цвета линий:

 fig1 = px.line(df, y=['A_red', 'A_blue']) fig1.data[0].line.color = 'green' fig1.data[1].line.color = 'purple' fig1.show()  

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

Не то чтобы вы просили об этом, но для того, чтобы получить

 figs = [fig1, fig2, fig3] figs.show()  

для работы вам нужно будет сделать следующее:

 figs = [fig1, fig2, fig3] for fig in figs:  fig.show()  

Чтобы отобразить все 3 на одном рисунке, вам сначала нужно преобразовать данные из широких в длинные:

 df = pd.DataFrame(np.random.randint(100, size=(100,6)),   columns=['A_red', 'A_blue', 'B_red', 'B_blue', 'C_red', 'C_blue']) df['x'] = df.index df_long = df.melt(id_vars='x', var_name='letter') df_long['group'] = df_long.letter.str.split('_', expand=True)[1] df_long['letter'] = df_long.letter.str.split('_', expand=True)[0]  

Затем вы можете сделать следующее:

 facet_fig = px.line(df_long, y='value', x='x', color='group', facet_row='letter')  

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

Комментарии:

1. Привет, Казман, это решает мою проблему, просто еще один вопрос: ` для фига на фиг: ` по-прежнему строит диаграммы на 3 отдельных вкладках браузера. Как мне загрузить его на 1 вкладке?

2. В правке описано, как огранить участки буквой. Если это часть чего-то вроде панели мониторинга, вы также можете отображать несколько графиков на одной странице.