Warum ignoriert ListPlot einige globale Optionen?

  • In 7.0.1 oder früher eingeführter und in 8.0.1 behobener Fehler '


    Warum verwendet der folgende Plot nicht die globale Option PlotMarkers?

     SetOptions[ListPlot, {ImageSize -> Automatic, PlotMarkers -> {"A"}}];
    ListPlot[Range[10]]
     

    Überprüfung der globalen Werte Optionen für ListPlot zeigen, dass PlotMarkers auf globaler Ebene festgelegt ist:

     Options[ListPlot, {PlotMarkers}] -> {PlotMarkers -> {"A"}}
     

    Wenn ich nur füttere Mit der Funktion ListPlot werden alle globalen Optionen korrekt dargestellt, aber der Zweck, global festgelegte Standardwerte festzulegen, wird vereitelt.

     ListPlot[Range[10], Options[ListPlot]]
     

    Meines Wissens sollten ListPlot[Range[10]] und ListPlot[Range[10], Options[ListPlot]] immer dasselbe Ergebnis zurückgeben, in diesem Fall jedoch nicht.

    Ich verwende Mathematica 8.0.0.0 Mac OS X 10.6.8

    15 March 2015
    Mr.Wizard
2 answers
  • Sieht aus wie ein Fehler, der für V8.0.1 behoben wurde.

    04 February 2012
    Brett Champion
  • In Version 7 scheint ListPlot nur globale Options[] zu verwenden, die für Graphics zulässig sind (wahrscheinlich über FilterRules). Sie können dies manuell mit einer expliziten Deklaration umgehen:

     SetOptions[ListPlot, {PlotMarkers -> {"A"}, Filling -> Axis}];
    
    ListPlot[Range[10], Options[ListPlot]]
     

    Warum ignoriert ListPlot einige globale Optionen?

    Wenn Sie diesen Fix automatisch machen möchten, können Sie Folgendes tun:

     Unprotect[ListPlot];
    
    ListPlot[args___] :=
      Block[{$lpOptsFix = True},
        ListPlot[args, Options[ListPlot]]
      ] /; ! TrueQ[$lpOptsFix]
     
    04 February 2012
    Mr.Wizard