Ejemplo n.º 1
0
 def _two_axis_timeseries(self, left_ts, right_ts, titles, colors):
     """Create a time series graph figure object with 2 time series
     plotted on the left and right y axes.
     """
     fig = Figure((8, 3), facecolor='white')
     ax_left = fig.add_subplot(1, 1, 1)
     ax_left.set_position((0.125, 0.1, 0.775, 0.75))
     fig.ax_left = ax_left
     ax_right = ax_left.twinx()
     ax_right.set_position(ax_left.get_position())
     predicate = (left_ts['avg_forcing'].mpl_dates >= date2num(
         self.config.data_date))
     for key in 'early_bloom_forcing late_bloom_forcing'.split():
         ax_left.plot(left_ts[key].mpl_dates[predicate],
                      left_ts[key].dep_data[predicate],
                      color=colors[0]['bounds'])
         ax_right.plot(right_ts[key].mpl_dates[predicate],
                       right_ts[key].dep_data[predicate],
                       color=colors[1]['bounds'])
     ax_left.plot(left_ts['avg_forcing'].mpl_dates,
                  left_ts['avg_forcing'].dep_data,
                  color=colors[0]['avg'])
     ax_right.plot(right_ts['avg_forcing'].mpl_dates,
                   right_ts['avg_forcing'].dep_data,
                   color=colors[1]['avg'])
     ax_left.set_ylabel(titles[0], color=colors[0]['avg'], size='x-small')
     ax_right.set_ylabel(titles[1], color=colors[1]['avg'], size='x-small')
     # Add line to mark switch from actual to averaged forcing data
     fig.data_date_line = ax_left.axvline(date2num(self.config.data_date),
                                          color='black')
     # Format x-axis
     ax_left.xaxis.set_major_locator(MonthLocator())
     ax_left.xaxis.set_major_formatter(DateFormatter('%j\n%b'))
     for axis in (ax_left, ax_right):
         for label in axis.get_xticklabels() + axis.get_yticklabels():
             label.set_size('x-small')
     ax_left.set_xlim((int(left_ts['avg_forcing'].mpl_dates[0]),
                       math.ceil(left_ts['avg_forcing'].mpl_dates[-1])))
     ax_left.set_xlabel('Year-days in {0} and {1}'.format(
         self.config.run_start_date.year,
         self.config.run_start_date.year + 1),
                        size='x-small')
     return fig