为产品子图创建一个类

时间:2018-07-26 18:02:57

标签: python matplotlib

我想知道如何设计一个不错的类来生成适合我目的的matplotlib图。 我想要获得的第一件事是一个可以如下调用的类,
但是我不知道如何设计这样的课程。

这是我要使用的方式:

fig,axs = MyClass(parameter...) 

我该如何正确使用呢?

编辑非常感谢@ImportanceOfBeingErnest,您给了我一个很好的起点,我现在的问题是,因为您向我展示了如何将**参数传递给班级,您对此有何想法?例如,如何传递变量列表以便在ax1,ax2,ax3,ax4中进行绘制?再次感谢您,您的帮助总是非常宝贵的

2 个答案:

答案 0 :(得分:2)

从本质上讲,您不能,或者至少不应该。类的返回应该是其自身的实例。

但是您可以叫一个班,例如

import matplotlib.pyplot as plt

class MyClass():
    def __init__(self, **parameters):
        self.fig, self.axs = plt.subplots(**parameters)

    def __call__(self):
        return self.fig, self.axs

fig, axs = MyClass(figsize=(6,5))()

这样做的缺点是您直接松开了所创建类实例的任何处理程序。这意味着将上面的代码编写为函数要简单得多,

import matplotlib.pyplot as plt

def myfunction(**parameters):
    fig, axs = plt.subplots(**parameters)
    return fig, axs

fig, axs = myfunction(figsize=(6,5))

因此,为了使类的使用有意义,人们可能希望以某种方式存储它,然后利用其属性或方法。

import matplotlib.pyplot as plt

class MyClass():
    def __init__(self, **parameters):
        self.fig, self.axs = plt.subplots(**parameters)

myclass = MyClass(figsize=(6,5))
fig = myclass.fig
axs = myclass.axs

答案 1 :(得分:2)

在其他答案上,您还可以创建一个实现__iter__函数的类,该函数将类模拟为元组,从而使其返回fig, axs

class MyClass:
    def __init__(self, params):
        self.fig, self.axs = plt.subplots()
        # Do stuff here
    def __iter__(self):
        for e in (self.fig, self.axs):
            yield e

fig, axs = MyClass(params)

但是,正如@ImportanceOfBeingErnest所述,这是非常规的。