def setup_ax(self): self.ax.xaxis.set_major_locator(x_major_locator) self.ax.xaxis.set_major_formatter(x_major_formatter) self.ax.yaxis.set_major_formatter(y_major_formatter) self.ax.tick_params(labelsize='small') self.ax.tick_params(axis='x', length=0) padding = datetime.timedelta(days=20) self.ax.set_xlim( qubesstats.parse_date(self.stats.months[ 0]) - padding, qubesstats.parse_date(self.stats.months[-1]) + padding) self.ax.set_ylabel('Unique IP addresses') for spine in ('top', 'bottom', 'left', 'right'): self.ax.spines[spine].set_linewidth(0.5) # ax.set_xlim self.ax.yaxis.grid(True, which='major', linestyle=':', alpha=0.7)
def add_data(self): bottom = (0,) * len(self.stats) offset = datetime.timedelta(days=BAR_WIDTH * 0.5) months = tuple(qubesstats.parse_date(i) - offset for i in self.stats.months) for release in self.stats.releases: for series in ('tor', 'plain'): sdata = tuple(self.stats.get_series(release, series)) handle = self.ax.bar( months, sdata, bottom=bottom, hatch=('///' if series == 'tor' else None), label=(release if series == 'plain' else None), color=COLOURS.get(release, '#ff0000'), #TANGO['ScarletRed1'] width=BAR_WIDTH, linewidth=0.5) if series == 'plain': self.handles.append(handle) bottom = tuple(bottom[i] + sdata[i] for i in range(len(bottom)))