如何确保我的matplotlib轴是自定义类?

时间:2014-12-22 22:14:20

标签: python matplotlib subclassing axes figures

我有一个自定义图形类,并且希望确保与其关联的所有轴,无论是使用subplots()还是twinx()创建的,都具有自定义行为。

现在我通过在创建每个轴之后将新方法绑定到每个轴来实现此目的,例如使用

import types

def my_ax_method(ax, test):
    print('{0} is doing something new as a {1}.'.format(ax, test))

class MyFigure(matplotlib.figure.Figure):
    def __init__(self, **kwargs):
        super(MyFigure, self).__init__(**kwargs)            
        axes_a = None
        axes_b = None
        axes_c = None

    def setup_axes(self, ax):    
        self.axes_a =  ax
        self.axes_b = self.axes_a.twinx()
        self.axes_c = self.axes_a.twiny()    
        self.axes_a.my_method = types.MethodType(my_ax_method, self.axes_a)
        self.axes_b.my_method = types.MethodType(my_ax_method, self.axes_b)
        self.axes_c.my_method = types.MethodType(my_ax_method, self.axes_c)

之类的东西

    fig, ax = matplotlib.pyplot.subplots(FigureClass=MyFigure)
    fig.setup_axes(ax)

    fig.axes_a.my_method("probe of A")
    fig.axes_b.my_method("test of B")
    fig.axes_c.my_method("trial of C")

这似乎是一种脆弱的方式来完成我正在尝试做的事情。是否有更好的,更多的Pythonic方式来解决这个问题?

特别是,有没有办法确保我的自定义Axes类的所有Figure都属于特定类(as is done for figures themselves):自定义Axes类我自己可以将这些方法作为其定义的一部分吗?

0 个答案:

没有答案