标题已经很明确了。然而,由于`matplotlib`的设置方式,不能简单地从`Axes`继承并使其工作。通常情况下,`Axes`对象不会被直接使用,它只是从`subplot`或其他函数中返回。
我想这样做有几个原因。首先,为了减少反复使用类似参数重现图表的次数。像这样:
这并不难写一个自定义函数,尽管它不够灵活。更大的原因是我想覆盖一些默认行为。举个简单的例子,考虑:
或者
尝试修改多个行为方面时,如果使用函数,很快就会变得混乱不堪。
然而,我还没有找到一种让
更新:可以使用monkey patch
我想这样做有几个原因。首先,为了减少反复使用类似参数重现图表的次数。像这样:
class LogTemp(plt.Axes):
""" Axes to display temperature over time, in logscale """
def __init__(self, *args, **kwargs):
super.__init__(*args, **kwargs)
self.set_xlabel("Time (s)")
self.set_ylabel("Temperature(C)")
self.set_yscale('log')
这并不难写一个自定义函数,尽管它不够灵活。更大的原因是我想覆盖一些默认行为。举个简单的例子,考虑:
class Negative(plt.Axes):
""" Plots negative of arguments """
def plot(self, x, y, *args, **kwargs):
super().plot(x, -y, *args, **kwargs)
或者
class Outliers(plt.Axes):
""" Highlight outliers in plotted data """
def plot(self, x, y, **kwargs):
out = y > 3*y.std()
super().plot(x, -y, **kwargs)
super().plot(x[out], y[out], marker='x', linestyle='', **kwargs)
尝试修改多个行为方面时,如果使用函数,很快就会变得混乱不堪。
然而,我还没有找到一种让
matplotlib
轻松处理新的Axes
类的方法。文档中没有提到过我所看到的任何地方。
这个问题解决了从Figure
类继承的问题。然后可以将自定义类传递给一些matplotlib
函数。一个未被回答的问题在这里表明Axes并不像想象的那么简单。更新:可以使用monkey patch
matplotlib.axes.Axes
来覆盖默认行为,但这只能在程序首次执行时进行一次。使用多个自定义Axes
无法使用此方法。