Plotly не показывает все данные

1

Я получаю разные результаты при попытке построить одинаковые данные с помощью mathplotlib и plotly. Plotly не показывает мне весь диапазон данных.

import plotly.plotly as py
import plotly.graph_objs as go

# filter the data
df3 = df[df.line_item_returned==0][['created_at', 'line_item_price']].copy()
# remove the time part from datetime
df3.created_at = df3.created_at.dt.floor('d')
# set the datatime column as index
df3 = df3.set_index('created_at')

# Create traces
trace0 = go.Scatter(
    x = df3.index,
    y = df3.line_item_price.resample('d').sum().rolling(90, center=True).mean(),
    mode = 'markers',
    name = 'markers'
)
data = [trace0]
py.iplot(data, filename='scatter-mode')

Изображение 174551

График показывает только диапазон октябрь-декабрь 2018 года.

При построении тех же данных с помощью matplotlib показан весь диапазон данных 2016-2018:

import matplotlib.pyplot as plt
%matplotlib inline

plt.plot(df3.line_item_price.resample('d').sum().rolling(90, center=True).mean())

Изображение 174551

Индекс содержит все данные 2016-2018:

df3.line_item_price.resample('d').sum().rolling(31, center=True).mean().index 

DatetimeIndex(['2015-11-18', '2015-11-19', '2015-11-20', '2015-11-21',
               '2015-11-22', '2015-11-23', '2015-11-24', '2015-11-25',
               '2015-11-26', '2015-11-27',
               ...
               '2018-12-10', '2018-12-11', '2018-12-12', '2018-12-13',
               '2018-12-14', '2018-12-15', '2018-12-16', '2018-12-17',
               '2018-12-18', '2018-12-19'],
              dtype='datetime64[ns]', name='created_at', length=1128, freq='D')

Почему это происходит?

  • 0
    что такое df3.index
  • 0
    len(df3.index) возвращает 19856
Теги:
pandas
matplotlib
plotly

1 ответ

0

Я думаю, это проблема с индексами.

%matplotlib inline
import plotly.offline as py
import plotly.graph_objs as go
import pandas as pd
import numpy as np

N = 2000
df = pd.DataFrame({"value":np.random.randn(N)},
                  index=pd.date_range(start='2015-01-01', periods=N))
# you don't really need to us 'plt'
df.resample('d').sum().rolling(90, center=True).mean().plot();

Изображение 174551

Но затем, если вы хотите использовать plotly вы должны использовать индекс из пересмотренной Series.

df_rsmpl = df.resample('d').sum().rolling(90, center=True).mean()

trace0 = go.Scatter(x = df_rsmpl.index,
                    y = df_rsmpl["value"])
data = [trace0]
py.iplot(data)

Изображение 174551

  • 0
    Большое спасибо, вы решили мою проблему

Ещё вопросы

Сообщество Overcoder
Наверх
Меню