Python 3.x matplotlib中的子类轴
标题差不多就是这么说的。 但是,按照matplotlib的设置方式,不可能简单地从轴继承并使其工作。 Axis对象从不直接使用,通常仅从对子批或其他函数的调用中返回 我想这样做有几个原因。 首先,一次又一次地减少具有相似参数的复制图。 大概是这样的:Python 3.x matplotlib中的子类轴,python-3.x,matplotlib,Python 3.x,Matplotlib,标题差不多就是这么说的。 但是,按照matplotlib的设置方式,不可能简单地从轴继承并使其工作。 Axis对象从不直接使用,通常仅从对子批或其他函数的调用中返回 我想这样做有几个原因。 首先,一次又一次地减少具有相似参数的复制图。 大概是这样的: class LogTemp(plt.Axes): """ Axes to display temperature over time, in logscale """ def __init__(self, *args, **kwar
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)
或
如果使用函数,尝试修改行为的多个方面将很快变得混乱
但是,我还没有找到让matplotlib轻松处理新Axis类的方法。
医生们在我见过的任何地方都没有提到。
从Figure类继承的问题地址。
然后可以将自定义类传递到某些matplotlib函数中。
一个未回答的问题表明轴心并没有那么简单
更新:可以使用monkey patch matplotlib.axes.axes覆盖默认行为,但这只能在第一次执行程序时执行一次。使用这种方法不可能使用多个自定义轴。我发现了一种关于的好方法。 他们的目标是一个没有记号或标记的Axis对象,这大大加快了创建时间。 可以使用matplotlib注册投影,然后使用这些投影 对于我给出的例子,它可以通过
class Outliers(plt.Axes):
""" Highlight outliers in plotted data """
name = 'outliers'
def plot(self, x, y, **kwargs):
out = abs(y - y.mean()) > 3*y.std()
super().plot(x, y, **kwargs)
super().plot(x[out], y[out], marker='x', linestyle='', **kwargs)
import matplotlib.projections as proj
proj.register_projection(Outliers)
然后它就可以被
ax = f.add_subplot(1, 1, 1, projection='outliers')
或
所需的唯一更改是类定义中的名称变量,然后将该名称传递到subplot的投影参数中。matplotlib文档中有一个如何创建自定义轴的示例:还有一个完整的。例如,可以找到一个用例。最后,我认为这与@ImportanceOfBeingErnest几乎相同,非常相似。这个问题是如何修改已经实例化的实例,尽管您的答案涵盖了这里的情况。
ax = f.add_subplot(1, 1, 1, projection='outliers')
fig, axes = plt.subplots(20,20, subplot_kw=dict(projection='outliers'))