Aggregating time series data

Let’s say I have a times series of units sold over several months. The xaxis shows units sold per day.
How can I create a dropdown menu option that allows me to change to options that show units sold per week, month, and other time periods? I know you can do something like this histograms but can’t seem to find a solution for time series line plots.

Hi @gmcintire,

I’d recommend using pandas for your aggregation step, in particular the pandas.DataFrame.resample method. Then you can plot the resampled result in a bar trace.

For the drop down, you could use a FigureWidget and ipywidgets Dropdown control. Here’s an example that uses a dropdown plus a few other controls:

Hope that helps get you started!

The figure widget seems to be the best non-Dash solution for this problem. Thanks!

I’ve been playing around with dropdown widgets and they’re not working for me. I copied the following code from the example on the plotly website

import pandas as pd
import plotly.plotly as py

from ipywidgets import widgets
from IPython.display import display, clear_output, Image
import plotly.graph_objs as go
from plotly.widgets import GraphWidget

# define our widgets
g = GraphWidget('')
w = widgets.Dropdown(
options=['red', 'blue', 'green'],
value='red', description=‘Colour:’,)`

# generate a function to handle changes in the widget
def update_on_change(change):
g.restyle({'marker.color': change["new"]})

# set a listener for changes to the dropdown widget
w.observe(update_on_change, names="selected_label")


The dropdown menu has no effect on the color of the bars. I choose red, blue, green and nothing happens.

Any ideas why this is?

Hi @gmcintire,

It looks like you came across an old tutorial. GraphWidget is deprecated, you’ll want to use FigureWidget instead. I think it might also be an old version of ipywidgets. What page were you looking at?

In any case, here’s a working example

# Imports
import plotly.graph_objs as go

import pandas as pd
import plotly.plotly as py
from ipywidgets import widgets

# Build dropdown
options=['red', 'blue', 'green']
w = widgets.Dropdown(

# Build Figure
fig = go.FigureWidget(data=[
    go.Bar(y=[1, 3, 2],
           marker={'color': options[0]})

# Add callback to dropdown to update bar colors
def update_on_change(change):[0].marker.color = change["new"]
w.observe(update_on_change, names="value")

# Display dropdown and figure in vertical layout
widgets.VBox([w, fig])

Hope that helps!

So I figured the issue and it was I was missing the [“new”] after the change parameter. How this work? The change parameter is a string not a dictionary. But its working now.

Thanks for the response thought, I’ll check the figure widget tutorial and implement it.