2012-01-02 33 views
6

當我繪製多個函數如exp,2^x,3^x時,是否可以生成每個函數的標籤?如何在mathematica中自動生成函數名?

我現在代碼:

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

我的意思是產生在這種情況下3個標籤來告訴它是什麼功能的用戶。

如:

enter image description here

你如何產生的?

+0

雖然它使用圖形[],而不是情節,[這](http://stackoverflow.com/a/7547457/353410)可能會給你一些想法 – 2012-01-02 03:05:35

+2

可能的重複[如何在Mathematica中標註不同的曲線?](http://stackoverflow.com/questions/7221315/how-do-i-label-different-curves-in -mathematica) – abcd 2012-01-02 04:15:33

回答

4

也許這個工程:使用TooltipPlot用工具提示生成一個Graphics對象。然後重寫提示放置所需的文本在所需位置:

Plot[ 
[email protected]{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

+0

這是一個非常美麗和聰明的使用符號圖形對象替代的力量。我們通常也是這樣做所有的後處理。 – 2012-01-03 20:22:27

1

一種方法是使用PlotLegends

(我不喜歡太多,但它是一個簡單的方法做你想要的)

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

enter image description here

看到幫助更多地自定義圖例。以上使用默認值。

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

3

Tooltip顯示標籤的替代方式,而鼠標指針在函數圖:

Plot[[email protected]{Exp[x], 2^x, 3^x}, {x, -5, 2}, AspectRatio -> Automatic, 
              PlotStyle -> {Red, Green, Blue}] 
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)

薩姆問下面的一個更簡單的方法。我現在不確定。但是使用這種方法更容易的一種方法是創建一個函數,然後簡單地調用這個函數來生成文本標籤。你可以把這個功能放在你把你所有使用的所有其他功能都放進去的地方,然後調用它。

這裏是東西:一是寫函數

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

,只要你想你可以修改它。

+0

它看起來很不錯,但對我來說有點複雜。有沒有簡單的方法來做到這一點?謝謝〜 – sam 2012-01-02 04:05:47

相關問題