Убрать пустое пространство c области графика Time Series с разрывами
В данных есть отсутствующие значения, хочу построить график без них, чтобы даты в эти периоды не отображались.
пример графика с разрывом:

Подготовка данных:
import pandas as pd
import numpy as np
import plotly.express as px
df = px.data.stocks()
df['date']=pd.to_datetime(df['date'])
df['GOOG']=np.where(
(df['date']>pd.to_datetime('01.10.2018', dayfirst=True))&(df['date']<pd.to_datetime('01.04.2019',dayfirst=True)),
np.nan,
df['GOOG'])
Убираю даты с отсутствующими значениями:
df2=df.dropna()
fig2 = px.line(df2, x='date', y="GOOG")
Пробовал конвертацию даты в строковый тип данных - не помогает
Ответы (2 шт):
Автор решения: D.Vinogradov
→ Ссылка
Не понимаю, должен ли быть график соединен, потому что в условиях написано без отсутствующих значений.
Первый блок видимо оставляем как у вас:
import pandas as pd
import numpy as np
import plotly.express as px
df = px.data.stocks()
df['date']=pd.to_datetime(df['date'])
df['GOOG']=np.where(
(df['date']>pd.to_datetime('01.10.2018', dayfirst=True))&(df['date']<pd.to_datetime('01.04.2019',dayfirst=True)),
np.nan,
df['GOOG'])
Далее делаем дату строковым индексом и строим плот
df.index = df.date.astype(str)
df.dropna()['GOOG'].plot(rot=60)
plt.show()
Как-то так.
UPD
df['date'] = df['date'].apply(lambda x: x.strftime("%Y/%m/%d"))
df2=df.dropna()
fig2 = px.line(df2, x='date', y="GOOG")
Автор решения: CrazyElf
→ Ссылка
На английском SO есть ещё такой рецепт, основанный на указании rangebreaks:
dt_all = pd.date_range(start=df['date'].iloc[0],end=df['date'].iloc[-1])
dt_obs = [d.strftime("%Y-%m-%d") for d in pd.to_datetime(df2['date'])]
# define dates with missing values
dt_breaks = [d for d in dt_all.strftime("%Y-%m-%d").tolist() if not d in dt_obs]
# hide dates with no values
fig2.update_xaxes(rangebreaks=[dict(values=dt_breaks)])




