3
votes

I have a Dash dashboard and I need to plot on the x axis months from 0-12 and I need to have multiple lines on the same figure for different years that have been selected, ie 1991-2040. The plotted value is a columns say 'total' in a dataframe. The labels should be years and the total value is on the y axis. My data looks like this:

      Month Year  Total
0       0  1991  31.4
1       0  1992  31.4
2       0  1993  31.4
3       0  1994  20
4       0  1995  300
..    ...   ...   ...
33      0  2024  31.4
34      1  2035  567
35      1  2035  10
36      1  2035  3
....

Do I need to group it and how to achieve that in Dash/Plotly?

1

1 Answers

1
votes

It seems to me that you should have a look at pd.pivot_table.

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

# create a df
N = 100
df = pd.DataFrame({"Date":pd.date_range(start='1991-01-01',
                                        periods=N,
                                        freq='M'),
                   "Total":np.random.randn(N)}) 

df["Month"] = df["Date"].dt.month
df["Year"] = df["Date"].dt.year
# use pivot_table to have years as columns
pv = pd.pivot_table(df,
                    index=["Month"],
                    columns=["Year"],
                    values=["Total"])
# remove multiindex in columns
pv.columns = [col[1] for col in pv.columns]

data = [go.Scatter(x = pv.index,
                   y = pv[col],
                   name = col)
        for col in pv.columns]

py.iplot(data)