5 Stimmen

Probleme bei der Übergabe von Optionen in speziellen Plot-Funktionen für Mathematica

Einem Experten sollte das schnell gelingen, aber ich bin relativ neu im Definieren von Funktionen mit Optionen. Hier ist ein Schema von dem, was ich versucht habe, ich werde erklären, nachdem ich den Code gezeigt habe:

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};

Es gibt vier kleine Feinheiten:

  1. Ich habe einen optionalen Parameter in meiner Funktion, die eine Liste von Ganzzahlen sein muss.
  2. Ich möchte die Möglichkeit haben, die Funktion mit jeder Option von Plot aufzurufen, insbesondere mit anderen Werten als den in der dritten Zeile angegebenen Standardwerten.
  3. Ich möchte für einige der Optionen Standardwerte haben.
  4. Möglicherweise möchte ich weitere Optionen in die Funktion einfügen, so dass nicht gewährleistet ist, dass alle Optionen an Plot weitergegeben werden.

Aber das, was ich oben habe, funktioniert nicht. Die Standardoptionen, die ich eingestellt habe, werden ignoriert, aber sie erscheinen in der ??MyPlotFunction Informationen für meine Funktion. Ich werde Beispiele geben, wenn ihr den Fehler noch nicht erkennen könnt.

Bearbeiten: Beispiele, die nicht funktionieren:

  1. SimplePlot[t_,opts:OptionsPattern[{PlotRange->{-4,4},Frame->True}]]:= Plot[2x+t,{x,0,1},opts]; Schlägt dies fehl, wird die Standardoption ignoriert.

  2. SimplePlot[t_,opts:OptionPattern[]]:= Plot[2x+t],{x,0,1},opts]; Options[SimplePlot] = {PlotRange->{-4,4},Frame->True}; Schlägt dies fehl, wird die Standardoption ignoriert.

  3. SimplePlot[t_,opts__:{PlotRange->{-4,4},Frame->True}]:= Plot[2x+t,{x,0,1},opts]; Die Standardoptionen funktionieren mit einem bloßen Aufruf, aber wenn eine dieser Optionen oder eine andere Plotoption außer Kraft gesetzt wird, gehen die übrigen Standardeinstellungen verloren.

10voto

Brett Champion Punkte 8457

OptionsPattern[] fängt nur die Optionen ab, die übergeben werden, daher müssen Sie alle nicht standardmäßigen Optionseinstellungen explizit einbeziehen, z.B. durch Verwendung von etwas wie:

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

Hier ist ein einfaches Beispiel:

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

0voto

Mr.Wizard Punkte 23929

Wie in den Kommentaren zu Bretts Antwort erwähnt, können Sie etwas wie folgt schreiben, da die zuerst angegebenen Optionen die später angegebenen Optionen ersetzen und da die Optionen für Plot als Liste angegeben werden können:

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

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X