10 Stimmen

Einzeichnen von Pfeilen an den Rändern einer Kurve

Inspiriert durch この質問 bei ask.sagemath, was ist die am besten Hinzufügen von Pfeilen an das Ende von Kurven, die durch Plot , ContourPlot usw...? Dies sind die Arten von Diagrammen, die man in der Schule sieht und die zeigen, dass die Kurve am Ende der Seite weitergeht.

Nach einigem Suchen konnte ich keine eingebaute Möglichkeit oder ein aktuelles Paket finden, um dies zu tun. (Es gibt PfeilErweitert aber es ist ziemlich alt).

Die in der ask.sagemath-Frage angegebene Lösung beruht auf der Kenntnis der Funktion und ihrer Endpunkte und (vielleicht) der Fähigkeit, Ableitungen zu berechnen. Die Übersetzung in Mathematica lautet

f[x_] := Cos[12 x^2]; xmin = -1; xmax = 1; small = .01; 
Plot[f[x],{x,xmin,xmax}, PlotLabel -> y==f[x], AxesLabel->{x,y},
  Epilog->{Blue,
    Arrow[{{xmin,f[xmin]},{xmin-small,f[xmin-small]}}],
    Arrow[{{xmax,f[xmax]},{xmax+small,f[xmax+small]}}]
  }]

arrow cos(12 x^2)

Eine alternative Methode besteht darin, einfach die Line[] Objekte, die von Plot[] con Arrow[] . Zum Beispiel

Plot[{x^2, Sin[10 x], UnitStep[x]}, {x, -1, 1}, 
  PlotStyle -> {Red, Green, {Thick, Blue}},
  (*AxesStyle -> Arrowheads[.03],*) PlotRange -> All] /. 
 Line[x__] :> Sequence[Arrowheads[{-.04, .04}], Arrow[x]]

multiple plots

Dies hat jedoch das Problem, dass jegliche Unstetigkeiten in den Linien Pfeilspitzen erzeugen, wo man sie nicht haben will (dies kann oft durch die Option Exclusions -> None ). Noch wichtiger ist, dass dieser Ansatz hoffnungslos ist bei CountourPlot s. Versuchen Sie z.B.

ContourPlot[x^2 + y^3 == 1, {x, -2, 2}, {y, -2, 1}] /. 
  Line[x__] :> Sequence[Arrowheads[{-.04, .04}], Arrow[x]]

(die Probleme im obigen Fall können durch die Regel behoben werden, z.B., {a___, l1_Line, l2_Line, b___} :> {a, Line[Join[l2[[1]], l1[[1]]]], b} oder durch entsprechende Pfeile mit einer Spitze.).

Wie Sie sehen, ist keiner der obigen (schnellen) Hacks besonders robust oder flexibel. Kennt jemand einen Ansatz, der das ist?

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