Module pyspecan.backend.mpl.ax

Classes

class Ax (ax: matplotlib.axes._axes.Axes, parent=None)
Expand source code
class Ax:
    def __init__(self, ax: Axes, parent=None):
        self.parent = parent
        self.ax = ax
        self._art = {}
        for i, art in enumerate(ax.artists):
            self.add_artist(i, art)

    @property
    def fig(self):
        return self.ax.figure

    @property
    def canvas(self):
        return self.fig.canvas

    @property
    def artists(self):
        return self._art

    def art(self, name):
        return self._art.get(name, None)

    def add_artist(self, name, art):
        if not art.figure == self.canvas.figure:
            raise RuntimeError
        art.set_animated(True)
        art.set_visible(True)
        self._art[name] = art

    def plot(self, *args, **kwargs):
        name = kwargs.get("name", None)
        if name is not None:
            del kwargs["name"]
        else:
            name = len(self._art)
        if self.art(name) is None:
            line, = self.ax.plot(*args, **kwargs)
            self.add_artist(name, line)
        else:
            line = self.art(name)
            if len(args) == 2:
                line.set_data(*args) # type: ignore
            else:
                print(f"plot args: {len(args)}")
                print(f"plot kwargs: {kwargs}")
        return line

    def plot3d(self, *args, **kwargs):
        name = kwargs.get("name", None)
        if name is not None:
            del kwargs["name"]
        else:
            name = len(self._art)
        if self.art(name) is None:
            line, = self.ax.plot(*args, **kwargs)
            self.add_artist(name, line)
        else:
            line = self.art(name)
            if len(args) == 3:
                line.set_data_3d(*args) # type: ignore
            else:
                print(f"plot args: {len(args)}")
                print(f"plot kwargs: {kwargs}")
        return line

    def scatter(self, *args, **kwargs):
        name = kwargs.get("name", None)
        if name is not None:
            del kwargs["name"]
        else:
            name = len(self._art)
        if self.art(name) is None:
            line, = self.ax.plot(*args, **kwargs)
            self.add_artist(name, line)
        else:
            line = self.art(name)
            if len(args) == 2:
                line.set_data(*args) # type: ignore
            else:
                print(f"plot args: {len(args)}")
                print(f"plot kwargs: {kwargs}")
        return line

    def imshow(self, *args, **kwargs):
        name = kwargs.get("name", None)
        if name is not None:
            del kwargs["name"]
        else:
            name = len(self._art)
        if self.art(name) is None:
            im = self.ax.imshow(*args, **kwargs)
            self.add_artist(name, im)
        else:
            im = self.art(name)
            im.set_data(*args) # type: ignore
            ks = [k for k in kwargs.keys()]
            for k in ks:
                if k in ("cmap", "interpolation", "resample", "rasterized"):
                    im.set(**{k: kwargs[k]}) # type: ignore
                    del kwargs[k]
        return im

    def plot_wireframe(self, *args, **kwargs):
        name = kwargs.get("name", None)
        if name is not None:
            del kwargs["name"]
        else:
            name = len(self._art)
        surf = self.ax.plot_wireframe(*args, **kwargs) # type: ignore
        # self.add_artist(name, surf)
        return surf

    def plot_surface(self, *args, **kwargs):
        name = kwargs.get("name", None)
        if name is not None:
            del kwargs["name"]
        else:
            name = len(self._art)
        surf = self.ax.plot_surface(*args, **kwargs) # type: ignore
        # self.add_artist(name, surf)
        return surf

    def set_data(self, name, *args):
        self.art(name).set_data(*args) # type: ignore

    def set_xdata(self, name, x):
        self.art(name).set_xdata(x) # type: ignore

    def set_ydata(self, name, y):
        self.art(name).set_ydata(y) # type: ignore

    def set_xlim(self, xmin, xmax):
        self.ax.set_xlim(xmin, xmax)
    def set_ylim(self, ymin, ymax):
        self.ax.set_ylim(ymin, ymax)

    def relim(self):
        self.ax.relim()

    def cla(self):
        self.ax.cla()

Subclasses

Instance variables

prop artists
Expand source code
@property
def artists(self):
    return self._art
prop canvas
Expand source code
@property
def canvas(self):
    return self.fig.canvas
prop fig
Expand source code
@property
def fig(self):
    return self.ax.figure

Methods

def add_artist(self, name, art)
Expand source code
def add_artist(self, name, art):
    if not art.figure == self.canvas.figure:
        raise RuntimeError
    art.set_animated(True)
    art.set_visible(True)
    self._art[name] = art
def art(self, name)
Expand source code
def art(self, name):
    return self._art.get(name, None)
def cla(self)
Expand source code
def cla(self):
    self.ax.cla()
def imshow(self, *args, **kwargs)
Expand source code
def imshow(self, *args, **kwargs):
    name = kwargs.get("name", None)
    if name is not None:
        del kwargs["name"]
    else:
        name = len(self._art)
    if self.art(name) is None:
        im = self.ax.imshow(*args, **kwargs)
        self.add_artist(name, im)
    else:
        im = self.art(name)
        im.set_data(*args) # type: ignore
        ks = [k for k in kwargs.keys()]
        for k in ks:
            if k in ("cmap", "interpolation", "resample", "rasterized"):
                im.set(**{k: kwargs[k]}) # type: ignore
                del kwargs[k]
    return im
def plot(self, *args, **kwargs)
Expand source code
def plot(self, *args, **kwargs):
    name = kwargs.get("name", None)
    if name is not None:
        del kwargs["name"]
    else:
        name = len(self._art)
    if self.art(name) is None:
        line, = self.ax.plot(*args, **kwargs)
        self.add_artist(name, line)
    else:
        line = self.art(name)
        if len(args) == 2:
            line.set_data(*args) # type: ignore
        else:
            print(f"plot args: {len(args)}")
            print(f"plot kwargs: {kwargs}")
    return line
def plot3d(self, *args, **kwargs)
Expand source code
def plot3d(self, *args, **kwargs):
    name = kwargs.get("name", None)
    if name is not None:
        del kwargs["name"]
    else:
        name = len(self._art)
    if self.art(name) is None:
        line, = self.ax.plot(*args, **kwargs)
        self.add_artist(name, line)
    else:
        line = self.art(name)
        if len(args) == 3:
            line.set_data_3d(*args) # type: ignore
        else:
            print(f"plot args: {len(args)}")
            print(f"plot kwargs: {kwargs}")
    return line
def plot_surface(self, *args, **kwargs)
Expand source code
def plot_surface(self, *args, **kwargs):
    name = kwargs.get("name", None)
    if name is not None:
        del kwargs["name"]
    else:
        name = len(self._art)
    surf = self.ax.plot_surface(*args, **kwargs) # type: ignore
    # self.add_artist(name, surf)
    return surf
def plot_wireframe(self, *args, **kwargs)
Expand source code
def plot_wireframe(self, *args, **kwargs):
    name = kwargs.get("name", None)
    if name is not None:
        del kwargs["name"]
    else:
        name = len(self._art)
    surf = self.ax.plot_wireframe(*args, **kwargs) # type: ignore
    # self.add_artist(name, surf)
    return surf
def relim(self)
Expand source code
def relim(self):
    self.ax.relim()
def scatter(self, *args, **kwargs)
Expand source code
def scatter(self, *args, **kwargs):
    name = kwargs.get("name", None)
    if name is not None:
        del kwargs["name"]
    else:
        name = len(self._art)
    if self.art(name) is None:
        line, = self.ax.plot(*args, **kwargs)
        self.add_artist(name, line)
    else:
        line = self.art(name)
        if len(args) == 2:
            line.set_data(*args) # type: ignore
        else:
            print(f"plot args: {len(args)}")
            print(f"plot kwargs: {kwargs}")
    return line
def set_data(self, name, *args)
Expand source code
def set_data(self, name, *args):
    self.art(name).set_data(*args) # type: ignore
def set_xdata(self, name, x)
Expand source code
def set_xdata(self, name, x):
    self.art(name).set_xdata(x) # type: ignore
def set_xlim(self, xmin, xmax)
Expand source code
def set_xlim(self, xmin, xmax):
    self.ax.set_xlim(xmin, xmax)
def set_ydata(self, name, y)
Expand source code
def set_ydata(self, name, y):
    self.art(name).set_ydata(y) # type: ignore
def set_ylim(self, ymin, ymax)
Expand source code
def set_ylim(self, ymin, ymax):
    self.ax.set_ylim(ymin, ymax)
class BlitAx (ax: matplotlib.axes._axes.Axes, parent=None)
Expand source code
class BlitAx(Ax):
    def set_xlim(self, *args, **kwargs):
        super().set_xlim(*args, **kwargs)
        self.relim()

    def set_ylim(self, *args, **kwargs):
        super().set_ylim(*args, **kwargs)
        self.relim()

    def relim(self, *args, **kwargs):
        super().relim(*args, **kwargs)
        self.canvas.draw()

Ancestors

Methods

def relim(self, *args, **kwargs)
Expand source code
def relim(self, *args, **kwargs):
    super().relim(*args, **kwargs)
    self.canvas.draw()
def set_xlim(self, *args, **kwargs)
Expand source code
def set_xlim(self, *args, **kwargs):
    super().set_xlim(*args, **kwargs)
    self.relim()
def set_ylim(self, *args, **kwargs)
Expand source code
def set_ylim(self, *args, **kwargs):
    super().set_ylim(*args, **kwargs)
    self.relim()