import matplotlib.pyplot as plt from w_helpers import load_data, aggregate_by_month plt.ion() temperature = load_data('mdw') temperature_monthly = aggregate_by_month(temperature) fig, ax = plt.subplots() def plot_aggregated_errorbar(ax, gb, label, picker=None, **kwargs): kwargs.setdefault('capsize', 3) kwargs.setdefault('markersize', 5) kwargs.setdefault('marker', 'o') eb = ax.errorbar(gb.index, 'mean', yerr='std', data=gb, label=label, picker=picker, **kwargs) fill = ax.fill_between(gb.index, 'min', 'max', alpha=.5, data=gb, color=eb[0].get_color()) ax.legend() ax.figure.canvas.draw_idle() return eb, fill
import matplotlib.pyplot as plt from w_helpers import load_bwi_data, aggregate_by_month plt.ion() bwi = load_bwi_data() bwi_monthly = aggregate_by_month(bwi) fig, ax = plt.subplots() def plot_aggregated_errorbar(ax, gb, label, picker=None, **kwargs): kwargs.setdefault('capsize', 3) kwargs.setdefault('markersize', 5) kwargs.setdefault('marker', 'o') eb = ax.errorbar(gb.index, 'mean', yerr='std', data=gb, label=label, picker=picker, **kwargs) fill = ax.fill_between(gb.index, 'min', 'max', alpha=.5, data=gb, color=eb[0].get_color()) ax.legend() ax.figure.canvas.draw_idle() return eb, fill arts = plot_aggregated_errorbar(ax, bwi_monthly, 'bwi') # EXERCISE # - make the shaded area configurable
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)