Как автоматически сгенерировать имя функции в Mathematica? - PullRequest
6 голосов
/ 02 января 2012

Когда я рисую несколько функций, таких как exp, 2 ^ x, 3 ^ x, возможно ли сгенерировать метку для каждой функции?

Мой код сейчас:

  Plot[{Exp[x], 2^x, 3^x}, {x, -5, 2}, AspectRatio -> Automatic, PlotStyle -> {Red, Green, Blue}]

В данном случае я имею в виду создание 3 меток, чтобы сообщить пользователю, что это за функция.

Например:

enter image description here

Как вы это генерируете?

Ответы [ 4 ]

4 голосов
/ 03 января 2012

Возможно, это работает: используйте Tooltip в Plot для генерации Graphics объекта с подсказками. Затем перепишите подсказку, чтобы поместить нужный текст в нужное место:

Plot[
 Tooltip@{Exp[x], 2^x, 3^x}, {x, -5, 2},
 AspectRatio -> Automatic,
 PlotStyle -> {Red, Green, Blue},
 PlotRange -> All,
 PlotRangePadding -> 1.1] /.
{
 Tooltip[{_, color_, line_}, tip_]
 :>
 {Text[Style[tip, 14], {.25, 0} + line[[1, -1]]], color, line}
}

Mathematica graphics

4 голосов
/ 02 января 2012

Я не уверен, каковы правила добавления другого, другого ответа на тот же вопрос.Но вот другой, другой способ сделать это.Если я должен добавить это в свой первый ответ, я могу это сделать.

Вы можете добавить текстовые метки вручную, используя текстовые команды.Я думаю, что это выглядит лучше.Вот один из способов:

Clear[x];
funs = {Exp[x], 2^x, 3^x};
funNames = Style[#, 12] & /@ funs;

(*the x-axis plot range used *)
from = -5; to = 2;

(* generate the coordinates at the end of the plot lines*)
pos = Map[{to, #} &, funs /. x -> to];

(*generate the text labels *)
text = Map[Text[#[[1]], #[[2]], {-1, 0}] &, Thread[{funNames, pos}]];

Построить окончательный результат (добавлен небольшой отступ для диапазона графика, чтобы добавленные метки были видны полностью)

Plot[funs, {x, from, to},
 PlotRangePadding -> {1, 1},
 PlotStyle -> {Red, Green, Blue},
 PlotRange -> All,
 Epilog -> text
 ]

enter image description here

update (1)

Сэм спросил ниже о более простом способе.Я не уверен сейчас.Но один из способов облегчить использование этого метода - создать функцию, а затем просто вызвать эту функцию один раз, чтобы сгенерировать текстовые метки.Вы можете поместить эту функцию туда, где вы помещаете все свои другие функции, которые используете постоянно, и просто вызывать ее.

Вот что-то: сначала напишите функцию

 (*version 1.1*)

myLegend[funs_List,                    (*list of functions to plot*)
   x_,                                 (*the independent variable*)
   from_?(NumericQ[#] && Im[#] == 0 &),(*the x-axis starting plot range*)
   to_?(NumericQ[#] && Im[#] == 0 &)   (*the x-axis ending plot range*)
   ] := Module[{funNames, pos, text, labelOffset = -1.3},

   (*make label names*)
   funNames = Style[#, 12] & /@ funs;

   (*generated the coordinates at the end of the plot lines*)
   pos = Map[{to, #} &, funs /. x -> to];

   (*generate the Text calls*)
   text = Map[Text[#[[1]], #[[2]], {labelOffset, 0}] &, 
     Thread[{funNames, pos}]]
   ];

А теперь просто вызывайте вышеупомянутое в любое время, когда вы хотите построить график с метками.Это будет всего лишь 1-2 лишние строки кода.вот так:

Clear[x]
from = -5; to = 2;
funs = {Exp[x], 2^x, 3^x};

Plot[funs, {x, from, to}, PlotRangePadding -> {1, 1}, 
 PlotStyle -> {Red, Green, Blue}, PlotRange -> All, 
 Epilog -> myLegend[funs, x, from, to]]

enter image description here

Вот несколько примеров:

enter image description here

Вы можете изменить его, как хотите.

3 голосов
/ 02 января 2012

Альтернативный способ с Tooltip отображением меток, когда указатель мыши находится на графиках функций:

Plot[Tooltip@{Exp[x], 2^x, 3^x}, {x, -5, 2}, AspectRatio -> Automatic,
                                             PlotStyle -> {Red, Green, Blue}]
1 голос
/ 02 января 2012

Одним из способов является использование PlotLegends

(мне это не очень нравится, но это простой способ сделать то, что вы хотите)

<< PlotLegends`
Clear[x];
funs = {Exp[x], 2^x, 3^x};
legends = Map[Text@Style[#, "TR", 12] &, funs];
Plot[Evaluate@funs, {x, -5, 2}, AspectRatio -> Automatic, 
 PlotStyle -> {Red, Green, Blue}, PlotLegend -> legends]

enter image description here

см. Помощь в настройке легенды. Выше используются значения по умолчанию.

http://reference.wolfram.com/mathematica/PlotLegends/tutorial/PlotLegends.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...