将默认变量传递给 matplotlib
Pass default variables to matplotlib
我正在创建一些函数来使用 matplotlib 创建标准形式的高质量图形。我通常创建线图、等高线图等。有没有办法将参数(轴限制、刻度位置等)传递给 matplotlib,指示 matplotlib 使用参数的默认值?例如
我创建了一个class
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"*
我创建了这个 class 的实例,但我只想指定 xlimit
inst = myclass()
inst.xlimit = [0,1]
并且我保持 ylimit 不变,所以 matplotlib 将其视为默认值。
然后我有一个功能
def plot_func(x,y,fig,inst):
ax = fig.gca()
ax.set_xlim(inst.xlimit)
ax.set_ylim(inst.ylimit)
ax.plot(x,y,linewidth=inst.linwidth)
return fig
我可以调用并传递我的 class 实例。到目前为止,这对我来说很好,但我必须在 my_class().
中为所有绘图参数设置值
有没有一种方法可以将 my_class() 中的这些值设置为某些值,这样如果我决定我只想要 matplotlib 的默认计算,例如限制、刻度、标签等。我仍然可以通过这些 'variables' 到我的函数 plot_func() ,它们将全部设置在那里,我可以自定义我想要的,并将其他所有内容保留为默认值?
为了避免这些答案,我知道 matplotlib 的 rc 设置,这不是我要找的。
由于 matplotlib
中的几乎所有内容都由 kwargs
设置,您可以将所有可能的可选设置定义为 None
,除非您要手动设置它们。
然后,当你调用 ax.plot
或 ax.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')
否则,我们可以更改任何我们喜欢的设置:
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')
这个问题的关键是能够使用 None
作为默认值。您可以创建自己的 class,但对于更简单的事情,例如仅设置轴限制,您可以简单地执行类似下面的代码,无需创建和实例化特殊的 class。
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 之间或其他任意范围
我正在创建一些函数来使用 matplotlib 创建标准形式的高质量图形。我通常创建线图、等高线图等。有没有办法将参数(轴限制、刻度位置等)传递给 matplotlib,指示 matplotlib 使用参数的默认值?例如
我创建了一个class
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"*
我创建了这个 class 的实例,但我只想指定 xlimit
inst = myclass()
inst.xlimit = [0,1]
并且我保持 ylimit 不变,所以 matplotlib 将其视为默认值。
然后我有一个功能
def plot_func(x,y,fig,inst):
ax = fig.gca()
ax.set_xlim(inst.xlimit)
ax.set_ylim(inst.ylimit)
ax.plot(x,y,linewidth=inst.linwidth)
return fig
我可以调用并传递我的 class 实例。到目前为止,这对我来说很好,但我必须在 my_class().
中为所有绘图参数设置值有没有一种方法可以将 my_class() 中的这些值设置为某些值,这样如果我决定我只想要 matplotlib 的默认计算,例如限制、刻度、标签等。我仍然可以通过这些 'variables' 到我的函数 plot_func() ,它们将全部设置在那里,我可以自定义我想要的,并将其他所有内容保留为默认值?
为了避免这些答案,我知道 matplotlib 的 rc 设置,这不是我要找的。
由于 matplotlib
中的几乎所有内容都由 kwargs
设置,您可以将所有可能的可选设置定义为 None
,除非您要手动设置它们。
然后,当你调用 ax.plot
或 ax.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')
否则,我们可以更改任何我们喜欢的设置:
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')
这个问题的关键是能够使用 None
作为默认值。您可以创建自己的 class,但对于更简单的事情,例如仅设置轴限制,您可以简单地执行类似下面的代码,无需创建和实例化特殊的 class。
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 之间或其他任意范围