我有一个绘图功能可以绘制一些数据。我想对它进行语法化,使其自动获得y个限制,但当我手动将特定限制传递给它时会例外。
当我希望使用自己的轴限制时,我通过手动更改变量的值来做到这一点。但是我知道这只是解决方法,因此欢迎提出任何建议:
def plot_data(dataset, set_own_lim=1, my_ymin, my_ymax):
ax=plt.subplot(111)
if set_own_lim=0:
ax.set_ylim(min(dataset),max(dataset)) #calculating y range from data
else:
ax.set_ylim(my_ymin, my_ymax) # uses my own limits for y range
ax.plot(dataset)
我想以某种方式定义一个函数,我可以像plot_data(some_data)
那样调用它,以从数据中获取自动限制,当我需要定义函数时,也可以将其称为plot_data(some_data,my_ymin, my_ymax)
。手动轴范围
答案 0 :(得分:1)
将my_ymin, my_ymax
参数设置为None
,然后在函数内部检查这些值是否为None
,然后可以计算它们,否则使用用户传递的值。像这样:
def plot_data(dataset, my_ymin=None, my_ymax=None):
ax=plt.subplot(111)
if not my_ymin:
ax.set_ylim(min(dataset),max(dataset))
else:
ax.set_ylim(my_ymin, my_ymax)
ax.plot(dataset)
答案 1 :(得分:1)
简单使用None
:
def plot_data(dataset, ymin=None, ymax=None):
# ...
ymin = min(dataset) if ymin is None else ymin
ymax = max(dataset) if ymax is None else ymax
# ...
请记住,这实际上会使您实际上将None
传递给set_XXXlim()
。在这种情况下,您可以使用前哨值:
sentinel = object()
def plot_data(dataset, ymin=sentinel, ymax=sentinel):
# ...
ymin = min(dataset) if ymin is sentinel else ymin
ymax = max(dataset) if ymax is sentinel else ymax
# ...
这将允许plot_data(data, None, None)
。