我正在创建一些函数来使用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设置,这不是我想要的。
答案 0 :(得分:0)
由于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')
答案 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之间或其他任意范围内