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};
有四个细微之处:

  • 我的函数中有一个可选参数,它需要是一个整数列表
  • 我希望能够使用Plot的任何选项调用函数,特别是使用第三行中指定的默认值以外的值
  • 我想为一些选项设置默认值
  • 我可能希望在函数中放置其他选项,因此不能保证所有选项都应传递到绘图
  • 但我上面所说的不起作用。我设置的默认选项将被忽略,但它们会出现在我的函数的
    ??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,所以我很自然地尝试将绘图和动画“扩展”到我的特殊应用程序(即各种场景中波浪绘图的动画)。