Wolfram mathematica Mathematica专用绘图函数中传递选项的问题
这对专家来说应该很快,但我在定义带有选项的函数方面相对较新。下面是我尝试过的方法的示意图,我将在显示代码后进行解释:Wolfram mathematica Mathematica专用绘图函数中传递选项的问题,wolfram-mathematica,Wolfram Mathematica,这对专家来说应该很快,但我在定义带有选项的函数方面相对较新。下面是我尝试过的方法的示意图,我将在显示代码后进行解释: MyPlotFunction[params_, optionalparameter_List:{1,2,3}, opts:OptionsPattern[]]:= Plot [ stuff, {x,0,1}, Evaluate@FilterRules[{opts},Options@Plot]]; Options[MyPlotFunction] = { PlotRang
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};
有四个细微之处:
??MyPlotFunction
信息中。如果你们还不能发现错误,我就举个例子
编辑:
不起作用的示例:
SimplePlot[t_,opts:OptionsPattern[{PlotRange->{-4,4},Frame->True}]:=
图[2x+t,{x,0,1},opts]代码>
如果失败,将忽略默认选项
SimplePlot[t_zy,opts:OptionPattern[]:=
图[2x+t],{x,0,1},opts];
选项[SimplePlot]={PlotRange->{-4,4},Frame->True}代码>
如果失败,将忽略默认选项
SimplePlot[t_uu,opts_uu:{PlotRange->{-4,4},Frame->True}]:=
图[2x+t,{x,0,1},opts]代码>
默认选项适用于裸调用,但如果其中一个选项或任何其他打印选项被覆盖,则其余默认选项将丢失
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]]
正如Brett回答中的评论所指出的,由于先给出的选项取代了后给出的选项,并且绘图选项可以作为列表给出,因此您可以这样写:
Options[SimplePlot] = {PlotRange -> {-4, 4}, Frame -> True};
SimplePlot[t_, opts : OptionsPattern[]] :=
Plot[2 x + t, {x, 0, 1}, opts, #] & @ Options[SimplePlot];
你能更详细地编辑这个吗。params就是你策划的东西吗?如果是这样,则将其作为绘图的参数。如果不是的话,它会去哪里?如果您解释可选参数的作用,也可能会有所帮助。你的功能不起作用;我没有结尾“]”,但我认为这是一个剪切粘贴错误。您将在here和Mathgroup上找到关于OptionValue、FilterRules等的其他讨论,这些讨论将有助于您使用选项。现在查看这些内容似乎很有用。这些内容适用于我的应用程序。但我不明白的一点是,如果我不过滤选项,它将不再有效。取完全相同的代码并替换Evaluate@FilterFules[{opts,Options[MyPlotFunction]},Options@Plot]只有选择。看起来像是将默认选项与指定选项连接起来,并将其输入到绘图中。当你为同一个选项提供冲突的值时,Plot如何决定使用哪一个?@braydenware问题的关键不是你过滤选项,而是你在
{opts}
之后传递默认选项,所以即使没有显式的{opts}
,您仍然将所有默认选项设置显式传递到绘图。这也是Brett将它们放在{opts}
-之后的原因,这样在{opts}
中显式传递的选项将覆盖它们后面的选项[MyPlotFunction]
中的选项。@braydenware在选项设置与相同选项名称发生冲突时,遇到的第一个问题就是所使用的问题。@Leonid评论得非常好。在测试了一些代码之后,我看到了这两个要点的作用。是否还有一种方法让函数“知道”所有可用选项,就像选项[Plot]返回的列表包括选项[Graphics]返回的列表一样?我最初的编程语言是Java,所以我很自然地尝试将绘图和动画“扩展”到我的特殊应用程序(即各种场景中波浪绘图的动画)。