예제 #1
0
def _timeseries_mean_and_error(y,
                               std,
                               *args,
                               axis=-1,
                               center=True,
                               fig=None,
                               **kwargs):
    # TODO/FIXME: You must multiply by ones(plates) in order to plot
    # broadcasted plates properly

    if fig is None:
        fig = plt.gcf()

    y = np.atleast_1d(y)
    shape = list(np.shape(y))

    # Get and remove the length of the time axis
    T = shape.pop(axis)

    # Move time axis to first
    y = np.rollaxis(y, axis)
    if std is not None:
        std = np.rollaxis(std, axis)

    y = np.reshape(y, (T, -1))
    if std is not None:
        std = np.reshape(std, (T, -1))

    # Remove 1s
    shape = [s for s in shape if s > 1]

    # Calculate number of rows and columns
    shape = misc.multiply_shapes(shape, (1, 1))
    if len(shape) > 2:
        raise Exception("Can plot only in 2 dimensions (rows and columns)")
    (M, N) = shape

    # Prefer plotting to rows
    if M == 1:
        M = N
        N = 1

    # Plot each timeseries
    ax0 = fig.add_subplot(M, N, 1)
    for i in range(M * N):
        if i > 0:
            # Share x axis between all subplots
            ax = fig.add_subplot(M, N, i + 1, sharex=ax0)
        else:
            ax = ax0

        # Autoscale the axes to data and use tight y and x axes
        ax.autoscale(enable=True, tight=True)
        ax.set_ylim(auto=True)

        if i < (M - 1) * N:
            # Remove x tick labels from other than the last row
            plt.setp(ax.get_xticklabels(), visible=False)

        if std is None:
            errorplot(y=y[:, i], axes=ax, **kwargs)
        else:
            if len(args) > 0:
                raise Exception("Can't handle extra arguments")
            errorplot(y=y[:, i], error=std[:, i], axes=ax, **kwargs)

        if center:
            # Center the zero level on y-axis
            ylim = ax.get_ylim()
            vmax = np.max(np.abs(ylim))
            ax.set_ylim([-vmax, vmax])

    # Remove height space between subplots
    fig.subplots_adjust(hspace=0)
예제 #2
0
 def _plates_from_parent(self, index):
     return tuple(misc.multiply_shapes(self.parents[index].plates,
                                       tiles))
예제 #3
0
 def _compute_plates_from_parent(self, index, plates):
     return tuple(misc.multiply_shapes(plates, tiles))
예제 #4
0
def _timeseries_mean_and_error(y, std, *args, axis=-1, center=True, fig=None, axes=None, **kwargs):
    # TODO/FIXME: You must multiply by ones(plates) in order to plot
    # broadcasted plates properly

    if fig is None:
        fig = plt.gcf()

    y = np.atleast_1d(y)
    shape = list(np.shape(y))

    # Get and remove the length of the time axis
    T = shape.pop(axis)

    # Move time axis to first
    y = np.rollaxis(y, axis)
    if std is not None:
        std = np.rollaxis(std, axis)
    
    y = np.reshape(y, (T, -1))
    if std is not None:
        std = np.reshape(std, (T, -1))

    # Remove 1s
    shape = [s for s in shape if s > 1]

    # Calculate number of rows and columns
    shape = misc.multiply_shapes(shape, (1,1))
    if len(shape) > 2:
        raise Exception("Can plot only in 2 dimensions (rows and columns)")
    (M, N) = shape

    # Prefer plotting to rows
    if M == 1:
        M = N
        N = 1

    # Plot each timeseries
    if axes is None:
        ax0 = fig.add_subplot(M, N, 1)
    for i in range(M*N):
        if axes is None:
            if i > 0:
                # Share x axis between all subplots
                ax = fig.add_subplot(M, N, i+1, sharex=ax0)
            else:
                ax = ax0

            # Autoscale the axes to data and use tight y and x axes
            ax.autoscale(enable=True, tight=True)
            ax.set_ylim(auto=True)

            if i < (M-1)*N:
                # Remove x tick labels from other than the last row
                plt.setp(ax.get_xticklabels(), visible=False)

        else:
            ax = axes[i]

        if std is None:
            errorplot(y=y[:,i], axes=ax, **kwargs)
        else:
            if len(args) > 0:
                raise Exception("Can't handle extra arguments")
            errorplot(y=y[:,i], error=std[:,i], axes=ax, **kwargs)

        if center:
            # Center the zero level on y-axis
            ylim = ax.get_ylim()
            vmax = np.max(np.abs(ylim))
            ax.set_ylim([-vmax, vmax])

    if axes is None:
        # Remove height space between subplots
        fig.subplots_adjust(hspace=0)
예제 #5
0
 def _compute_plates_from_parent(self, index, plates):
     return tuple(misc.multiply_shapes(plates, tiles))