def add_date_bars(self, x_values, y_values, name='', width=0.5, has_baseline=True, baseline_pos=0, color='', alpha=0.5, total_bars=1, twinx=False, first_last_left_blank=False, plus_minus_seperate_color=False, above_color='red', below_color='blue'): self.alpha = float(alpha) if twinx: self.ax2 = self.ax.twinx() self.bar_count += 1 if len(x_values) > 1: date_interval = mpl.dates.date2num(x_values[1]) - mpl.dates.date2num(x_values[0]) else: date_interval = 1 first_last_left_blank = True bar_width = width * date_interval / total_bars x_values = [mpl.dates.date2num(i)-(date_interval * width/2) + (self.bar_count-1) * bar_width for i in x_values] bar = Bar(self, twinx) y_values = self.change_missing_value(y_values, [np.nan, 'nan', 'Nan'], 0) after_last_date_number = x_values[-1] + date_interval x_values.append(after_last_date_number) y_values.append(0) if first_last_left_blank: first_data_minus_one_period = x_values[0] - date_interval x_values.insert(0, first_data_minus_one_period) y_values.insert(0, 0) if plus_minus_seperate_color: plus_bars = [i if i>baseline_pos else 0 for i in y_values] minus_bars = [i if i<baseline_pos else 0 for i in y_values] self.set_legend(False) bar.date_plotting(x_values, plus_bars, bar_width, name, color=above_color, alpha=float(alpha), twinx=twinx) bar.date_plotting(x_values, minus_bars, bar_width, name, color=below_color, alpha=float(alpha), twinx=twinx) self.now_color = '' else: if color == '': bar_color = self.ax._get_lines.color_cycle.next() else: bar_color = color self.now_color = bar_color bars = bar.date_plotting(x_values, y_values, bar_width, name, color=bar_color, alpha=alpha, twinx=twinx) self.set_legend(True) self._add_legends(bars, name) self.fig.subplots_adjust(left=0.05, right=0.88) no_zero_values = [i for i in y_values if i != 0] if len(no_zero_values) > 0: if max(np.nanmin(no_zero_values) ,np.nanmax(no_zero_values)) < 10: ax2_min = np.nanmin(no_zero_values) -0.5 ax2_max = np.nanmax(no_zero_values) + 0.5 else: ax2_min = np.nanmin(no_zero_values) * 0.95 ax2_max = np.nanmax(no_zero_values) * 1.05 else: ax2_min = -0.5 ax2_max = 0.5 self.add_text(0.40, 0.7, 'no index data found!') self.max_value.append(ax2_max) self.min_value.append(ax2_min) if has_baseline: now_ax = getattr(self, 'ax2' if twinx else 'ax') now_ax.plot(x_values, [baseline_pos]*len(x_values), 'k-') self.min_date = mpl.dates.num2date(x_values[0]) self.max_date = mpl.dates.num2date(x_values[-1]) self.set_xaxis_limit() if twinx: self.set_yaxis_limit(ax2_max, ax2_min,axis=self.ax2, auto=False)
def add_date_bars(self, x_values, y_values, name='', width=0.5, has_baseline=True, baseline_pos=0, color='', alpha=0.5, total_bars=1, twinx=False, first_last_left_blank=False, plus_minus_seperate_color=False, above_color='red', below_color='blue'): self.alpha = float(alpha) if twinx: self.ax2 = self.ax.twinx() self.bar_count += 1 if len(x_values) > 1: date_interval = mpl.dates.date2num( x_values[1]) - mpl.dates.date2num(x_values[0]) else: date_interval = 1 first_last_left_blank = True bar_width = width * date_interval / total_bars x_values = [ mpl.dates.date2num(i) - (date_interval * width / 2) + (self.bar_count - 1) * bar_width for i in x_values ] bar = Bar(self, twinx) y_values = self.change_missing_value(y_values, [np.nan, 'nan', 'Nan'], 0) after_last_date_number = x_values[-1] + date_interval x_values.append(after_last_date_number) y_values.append(0) if first_last_left_blank: first_data_minus_one_period = x_values[0] - date_interval x_values.insert(0, first_data_minus_one_period) y_values.insert(0, 0) if plus_minus_seperate_color: plus_bars = [i if i > baseline_pos else 0 for i in y_values] minus_bars = [i if i < baseline_pos else 0 for i in y_values] self.set_legend(False) bar.date_plotting(x_values, plus_bars, bar_width, name, color=above_color, alpha=float(alpha), twinx=twinx) bar.date_plotting(x_values, minus_bars, bar_width, name, color=below_color, alpha=float(alpha), twinx=twinx) self.now_color = '' else: if color == '': bar_color = self.ax._get_lines.color_cycle.next() else: bar_color = color self.now_color = bar_color bars = bar.date_plotting(x_values, y_values, bar_width, name, color=bar_color, alpha=alpha, twinx=twinx) self.set_legend(True) self._add_legends(bars, name) self.fig.subplots_adjust(left=0.05, right=0.88) no_zero_values = [i for i in y_values if i != 0] if len(no_zero_values) > 0: if max(np.nanmin(no_zero_values), np.nanmax(no_zero_values)) < 10: ax2_min = np.nanmin(no_zero_values) - 0.5 ax2_max = np.nanmax(no_zero_values) + 0.5 else: ax2_min = np.nanmin(no_zero_values) * 0.95 ax2_max = np.nanmax(no_zero_values) * 1.05 else: ax2_min = -0.5 ax2_max = 0.5 self.add_text(0.40, 0.7, 'no index data found!') self.max_value.append(ax2_max) self.min_value.append(ax2_min) if has_baseline: now_ax = getattr(self, 'ax2' if twinx else 'ax') now_ax.plot(x_values, [baseline_pos] * len(x_values), 'k-') self.min_date = mpl.dates.num2date(x_values[0]) self.max_date = mpl.dates.num2date(x_values[-1]) self.set_xaxis_limit() if twinx: self.set_yaxis_limit(ax2_max, ax2_min, axis=self.ax2, auto=False)