如何在mathematica中自动生成函数名?

时间:2012-01-02 02:13:06

标签: wolfram-mathematica

当我绘制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 个答案:

答案 0 :(得分:4)

我不确定为同一个问题添加另一个不同答案的规则是什么。但这是另一种不同的方式。如果我应该将其添加到我的第一个答案中,我可以这样做。

您可以使用文本命令手动添加文本标签。我觉得它看起来更好。这是一种方式:

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

更新(1)

Sam在下面问了一个更简单的方法。我现在不确定。但是,使这种方法更容易使用的一种方法是创建一个函数,然后简单地调用此函数一次以生成文本标签。您可以将此功能放在您放置所有其他功能的位置,然后调用它。

这是:首先编写函数

 (*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

您可以根据需要进行修改。

答案 1 :(得分:4)

也许这样做有效:在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

答案 2 :(得分:3)

当鼠标指针位于功能图时,Tooltip显示标签的替代方式:

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

答案 3 :(得分:1)

一种方法是使用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