Те же диапазоны оси x для подзаголовков в Plotly

Я пытаюсь сделать подсюжеты в Plotly. У меня есть две строки, которые отображают данные временных рядов из двух разных фреймов данных. Я хочу, чтобы ось x на двух подзаголовках находилась в разумном диапазоне. Как я могу это сделать?

Это код, который у меня есть для моих сюжетных подзаговоров:

trace_df1 = go.Scatter(
   y=df1[“y”],
   x=df1[“x”]
)

trace_df2 = go.Scatter(
    y=df2[“y”],
    x=df2[“x”]
)


fig = tools.make_subplots(rows=2, cols=1)
fig.append_trace(trace_df1, 1, 1)
fig.append_trace(trace_df2, 2, 1)

person Siddharth Satpathy    schedule 07.11.2019    source источник
comment
@ Просто основной вопрос о структуре данных? У временных рядов один и тот же временной индекс? Я предполагаю, что нет, поскольку они не организованы в одном фрейме данных ...   -  person vestland    schedule 07.11.2019
comment
Как мое предложение сработало для вас?   -  person vestland    schedule 07.11.2019
comment
Действительно хороший ответ, @vestland. Спасибо. Я ценю усилия, которые вы приложили для этого подробного ответа. Ответ работает. знак равно   -  person Siddharth Satpathy    schedule 07.11.2019
comment
Рад слышать!   -  person vestland    schedule 07.11.2019


Ответы (1)


Я основываю это предложение на предположении, что у вас есть два разных временных ряда для two different or over-lapping time indexes. В противном случае это не было бы большой проблемой. Я собираюсь предположить, что временные ряды относятся к same length.

Участок для отправной точки:

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

Код отправной точки:

# imports
from plotly.subplots import make_subplots
import plotly.graph_objs as go
import pandas as pd
import numpy as np

# data 1
np.random.seed(123)
frame_rows = 40
frame_columns = ['V_1']
df_1 = pd.DataFrame(np.random.uniform(-10,10,size=(frame_rows, len(frame_columns))),
                  index=pd.date_range('1/1/2020', periods=frame_rows),
                    columns=frame_columns)
df_1=df_1.cumsum()+100
df_1.iloc[0]=100
df_1

# data 2
frame_rows = 40
frame_columns = ['V_1']
df_2 = pd.DataFrame(np.random.uniform(-10,11,size=(frame_rows, len(frame_columns))),
                  index=pd.date_range('2/2/2020', periods=frame_rows),
                    columns=frame_columns)
df_2=df_2.cumsum()+100
df_2.iloc[0]=100

# plotly
fig = go.Figure()
fig.add_trace(go.Scatter(x=df_1.index, y=df_1['V_1']))
fig.add_trace(go.Scatter(x=df_2.index, y=df_2['V_1']))
fig.show()

График предлагаемого решения:

Обратите внимание, что верхняя ось x скрыта с помощью fig['layout']['xaxis']['tickfont']['color']='rgba(0,0,0,0)'

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

Код предлагаемого решения:

df_1b = df_1.reset_index()
df_1b

df_2b = df_1.reset_index()
df_2b

# source data, integer as index
fig = make_subplots(rows=2, cols=1)
fig.add_trace(go.Scatter(x=df_1b.index, y=df_1['V_1']), row=1, col=1)
fig.add_trace(go.Scatter(x=df_2b['index'], y=df_2['V_1']), row=2, col=1)
fig['layout']['xaxis']['tickfont']['color']='rgba(0,0,0,0)'
fig.show()
person vestland    schedule 07.11.2019
comment
Действительно хороший ответ, @vestland. Спасибо. Я ценю усилия, которые вы приложили для этого подробного ответа. Ответ работает. знак равно - person Siddharth Satpathy; 07.11.2019