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

dee*_*gee 5 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};
Run Code Online (Sandbox Code Playgroud)

有四个微妙的细微之处:

  1. 我的函数中有一个可选参数,需要是一个整数列表.
  2. 我希望能够使用Plot的任何选项调用该函数,尤其是使用除第三行中指定的默认值之外的值.
  3. 我想要一些选项的默认值.
  4. 我可能想在函数中添加其他选项,因此无法保证所有选项都应该传递给plot.

但我上面所做的不起作用.我设置的默认选项被忽略,但它们出现在??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]; 默认选项适用于裸调用,但如果覆盖其中一个选项或任何其他绘图选项,则其余默认值将丢失.

Bre*_*ion 9

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

FilterRules[{opts, Options[MyPlotFunction]}, Options@Plot]
Run Code Online (Sandbox Code Playgroud)

这是一个简单的例子:

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]]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • @braydenware关键不在于你*过滤*选项,而是在*{opts}`后你*传递*你的默认选项,所以即使没有明确的`{opts}`,你仍然传递所有的默认选项明确设置为'Plot`.这也是Brett在`{opts}`之后放置它们的原因 - 所以在`{opts}`中显式传递的选项会覆盖它们之后的'Options [MyPlotFunction]`中的选项. (4认同)
  • @braydenware如果选项设置与选项名称相冲突,则遇到的第一个选项是使用的选项. (3认同)