Вдохновленный этим вопросом в ask.sagemath, каков лучший способ добавления стрелок в конец кривых, полученных с помощью Plot
, ContourPlot
и т. Д..?Это типы графиков, которые можно увидеть в старшей школе. Это означает, что кривая продолжается в конце страницы.
После некоторых поисков я не смог найти встроенный способ или современный пакет для выполнения.этот.(Существует ArrowExtended , но он довольно старый).
Решение, данное в вопросе ask.sagemath, основано на знании функции и ее конечных точек и (возможно) способности принятьпроизводные.Его перевод на Mathematica:
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]}}]
}]
Альтернативный метод состоит в простой замене Line[]
объектов, сгенерированных на Plot[]
, Arrow[]
.Например,
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]]
Но проблема заключается в том, что любые разрывы в строках генерируют наконечники стрелок там, где они вам не нужны (это часто можно исправить с помощью параметраExclusions -> None
).Что еще более важно, этот подход безнадежен с CountourPlot
с.Например, попробуйте
ContourPlot[x^2 + y^3 == 1, {x, -2, 2}, {y, -2, 1}] /.
Line[x__] :> Sequence[Arrowheads[{-.04, .04}], Arrow[x]]
(проблемы в вышеприведенном случае можно исправить с помощью правила, например, {a___, l1_Line, l2_Line, b___} :> {a, Line[Join[l2[[1]], l1[[1]]]], b}
или с помощью соответствующих односторонних стрелок.).
Как вы можете видеть, ни один из вышеперечисленных (быстрые хаки) не является особенно надежным или гибким.Кто-нибудь знает такой подход?