示例#1
0
文件: plotter.py 项目: Qmole/mpl_easy
    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)
示例#2
0
    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)