def __init__(self, hourly_data, label, yearly_ax, monthly_ax, daily_ax, agg_by_day=None, agg_by_month=None, style_cycle=None): '''Class to manage 3-levels of aggregated temperature Parameters ---------- hourly_data : DataFrame Tempreture measured hourly label : str The name of this data set_a yearly_ax : Axes The axes to plot 'year' scale data (aggregated by month) to monthly_ax : Axes The axes to plot 'month' scale data (aggregated by day) to daily_ax : Axes The axes to plot 'day' scale data (un-aggregated hourly) to agg_by_day : DataFrame, optional Data already aggregated by day. This is just to save computation, will be computed if not provided. agg_by_month : DataFrame, optional Data already aggregated by month. This is just to save computation, will be computed if not provided. style_cycle : Cycler, optional Style to use for plotting ''' # data self.data_by_hour = hourly_data if agg_by_day is None: agg_by_day = aggregate_by_day(hourly_data) self.data_by_day = agg_by_day if agg_by_month is None: agg_by_month = aggregate_by_month(hourly_data) self.data_by_month = agg_by_month # style if style_cycle is None: style_cycle = ( (cycler('marker', ['o', 's', '^', '*', 'x', 'v', '8', 'D', 'H', '<']) + cycler('color', [ '#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf' ]))) self.style_cycle = style_cycle() # axes self.yearly_ax = yearly_ax self.monthly_ax = monthly_ax self.daily_ax = daily_ax # name self.label = label # these will be used for book keeping self.daily_artists = {} self.daily_index = {} self.hourly_artiists = {} # artists self.yearly_art = plot_aggregated_errorbar(self.yearly_ax, self.data_by_month, self.label, picker=5, **next(self.style_cycle)) # pick methods self.y_cid = self.yearly_ax.figure.canvas.mpl_connect( 'pick_event', self._yearly_on_pick) self.y_cid = self.yearly_ax.figure.canvas.mpl_connect( 'pick_event', self._monthly_on_pick) self.y_cid = self.yearly_ax.figure.canvas.mpl_connect( 'pick_event', self._daily_on_pick)
import matplotlib.pyplot as plt from w_helpers import load_data, aggregate_by_day, extract_day_of_hourly, label_date import uuid datasource = 'central_park' temperature = load_data(datasource) temperature = temperature[temperature['year'] >= 2017] temperature_daily = aggregate_by_day(temperature) class RowPrinter: def __init__(self, ln, df, picker=10): ln.set_picker(picker) # we can use this to ID our line! self.uid = str(uuid.uuid4()) ln.set_gid(self.uid) self.ln = ln self.df = df self.cid = None self.connect() def connect(self): self.remove() self.cid = ln.figure.canvas.mpl_connect('pick_event', self) def __call__(self, event): # ignore picks on not-our-artist if event.artist is not self.ln: return
import matplotlib.pyplot as plt from w_helpers import load_ornl_data, aggregate_by_day, extract_day_of_hourly import uuid ornl = load_ornl_data() ornl = ornl[ornl['year'] >= 2016] ornl_daily = aggregate_by_day(ornl) class RowPrinter: def __init__(self, ln, df, picker=10): ln.set_picker(picker) self.uid = str(uuid.uuid4()) ln.set_gid(self.uid) self.ln = ln self.df = df self.cid = None self.connect() def connect(self): self.remove() self.cid = ln.figure.canvas.mpl_connect('pick_event', self) def __call__(self, event): # ignore picks on not-our-artist if event.artist is not self.ln: return # for each hit index, print out the row for i in event.ind: print(self.df.iloc[i])