将默认变量传递给matplotlib

时间:2017-01-20 03:22:43

标签: python matplotlib parameters default

我正在创建一些函数来使用matplotlib创建标准表单的质量数字。我通常会创建线图,等高线图等。有没有办法将参数(轴限制,刻度位置等)传递给matplotlib,指示matplotlib使用参数的默认值?例如

我创建了一个类

AffineTransform

我创建了这个类的实例,但我只想指定xlimit

class my_class(object):
    xlimit = *something matplotlib reads as "use default"*
    ylimit = *something matplotlib reads as "use default"*
    linwidth = *something matplotlib reads as "use default"*

我保持ylimit不变,所以matplotlib将其视为默认值。

然后我有一个功能

inst = myclass()
inst.xlimit = [0,1]

我可以调用并传递我的类实例。到目前为止,这对我来说很合适,但我必须在my_class()中为我的所有绘图参数设置值。

有没有办法将my_class()中的这些值设置为某种东西,这样如果我决定我只想要matplotlib的默认计算,比如限制,刻度,标签等等,我仍然可以将这些'变量'传递给我function plot_func(),它们都将被设置,我可以自定义我想要的内容,并将其他所有内容保留为默认值?

为了避免这些答案,我知道matplotlib的rc设置,这不是我想要的。

2 个答案:

答案 0 :(得分:0)

由于matplotlib中几乎所有内容都由kwargs设置,因此您可以将所有可能的可选设置定义为None,除非您要手动设置它们。

然后,当您调用ax.plotax.set_xlim时,您可以传入可选设置,因此如果函数收到空值,您将获得默认设置,否则您将获得手动定义的选项。

class my_class(object):
    xlimit = (None, None)
    ylimit = (None, None)
    linewidth = None
    color = None


def plot_func(x,y,fig,inst):

    ax = fig.gca()
    ax.plot(x, y, linewidth=inst.linewidth, color=inst.color)
    ax.set_xlim(inst.xlimit)
    ax.set_ylim(inst.ylimit)

    return fig

然后,如果我们使用默认设置调用它,我们得到:

x = range(5)
y = range(5)

fig, ax = plt.subplots(1)
inst1 = my_class()
plot_func(x, y, fig, inst1)

fig.savefig('default_options.png')

enter image description here

否则,我们可以更改我们喜欢的任何设置:

ax.cla()

inst2 = my_class()
inst2.xlimit = [-2, 8]
inst2.linewidth = 5
inst2.color = 'r'

plot_func(x, y, fig, inst2)

fig.savefig('custom_options.png')

enter image description here

答案 1 :(得分:0)

此问题的关键是可以使用None作为默认值。您可以创建自己的类,但是对于更简单的事情(例如仅设置轴限制),您只需执行以下代码即可,而无需创建和实例化特殊的类。

    def plot_func(x,y,xlimit=[None, None],ylimit =[None, None]):

    ax = fig.gca()
    ax.plot(x, y)
    ax.set_xlim(xlimit)
    ax.set_ylim(ylimit)

    return fig

您可以使用 plot_func(x,y),当您只想绘图而没有设置限制时 要么 plot_func(x,y,xlimit=[0,10])假设您希望将x范围限制在0到10之间或其他任意范围内