Вдохновленный этим вопросом на 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]]
Но здесь есть проблема, заключающаяся в том, что любые разрывы в линиях генерируют стрелки там, где они вам не нужны (это часто можно исправить с помощью опции Исключения -> Нет
). Что еще более важно, этот подход безнадежен с CountourPlot
s. Например, попробуйте
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}
или с помощью соответствующих односторонних стрелок.).
Как видите, ни один из вышеперечисленных (быстрых приемов) не является особенно надежным или гибким. Кто-нибудь знает такой подход?