在Mathematica的专用绘图函数中传递选项的问题

时间:2011-12-16 22:36:01

标签: wolfram-mathematica

对于专家来说这应该很快,但我在使用选项定义函数方面相对较新。这是我尝试过的示意图,我将在显示代码后解释:

MyPlotFunction[params_, optionalparameter_List:{1,2,3}, opts:OptionsPattern[]]:=
    Plot [ stuff, {x,0,1},  Evaluate@FilterRules[{opts},Options@Plot]];

Options[MyPlotFunction] = {  PlotRange->{-5,5}, Frame->True, ... other plot options};

有四个微妙的细微之处:

  1. 我的函数中有一个可选参数,需要是一个整数列表。
  2. 我希望能够使用任何Plot选项调用该函数,尤其是使用第三行中指定的默认值以外的值。
  3. 我想要一些选项的默认值。
  4. 我可能想在函数中添加其他选项,因此无法保证所有选项都应该传递给plot。
  5. 但我上面所说的不起作用。我设置的默认选项将被忽略,但它们会显示在我的函数的??MyPlotFunction信息中。如果你们还没有发现错误,我会举例说明。

    编辑: 不起作用的示例:

    1. SimplePlot[t_,opts:OptionsPattern[{PlotRange->{-4,4},Frame->True}]]:= Plot[2x+t,{x,0,1},opts]; 失败,默认选项被忽略。

    2. SimplePlot[t_,opts:OptionPattern[]]:= Plot[2x+t],{x,0,1},opts]; Options[SimplePlot] = {PlotRange->{-4,4},Frame->True}; 失败,默认选项被忽略。

    3. SimplePlot[t_,opts__:{PlotRange->{-4,4},Frame->True}]:= Plot[2x+t,{x,0,1},opts]; 默认选项适用于裸调用,但如果覆盖其中一个选项或任何其他绘图选项,则其余默认值将丢失。

2 个答案:

答案 0 :(得分:9)

OptionsPattern[]仅捕获传入的选项,因此您需要明确包含任何非默认选项设置,例如使用以下内容:

FilterRules[{opts, Options[MyPlotFunction]}, Options@Plot]

这是一个简单的例子:

Options[MyPlotFunction] = {PlotRange -> {-5, 5}, Frame -> True};

MyPlotFunction[params_, optionalparameter_List: {1, 2, 3}, 
  opts : OptionsPattern[MyPlotFunction]] := 
 Plot[optionalparameter, {x, 0, 1}, 
  Evaluate@FilterRules[{opts, Options[MyPlotFunction]}, Options@Plot]]

enter image description here

答案 1 :(得分:0)

正如Brett的答案中所述,由于选项给出了后来给出的第一个替代选项,并且因为Plot的选项可以作为列表给出,你可以这样写:

Options[SimplePlot] = {PlotRange -> {-4, 4}, Frame -> True};

SimplePlot[t_, opts : OptionsPattern[]] :=
  Plot[2 x + t, {x, 0, 1}, opts, #] & @ Options[SimplePlot];