2009年3月7日 星期六

Mathematica 繪圖功能--加圖例的方法

真是快被Mathematica搞瘋了
畫曲線圖的時候不是本來就應該要把這種基本的功能附上嗎?
我幾乎想要放棄,改用Excel來畫圖了
(可是excel畫圖的缺點是還要自己設定x,y的資料點,雖然也不花時間啦,但總覺得應該可以一個軟體用到底)
總之呢,我花了數個小時在研究Mathematic Plot的選項
可以設定的很多,就是沒有辦法顯示圖例
搜尋了老半天,才終於找到Inset這個功能裡面有教加圖例的範例

老實說,誰會知道要用這種方式加呢?
不過,Inset裡面要設定的東西太多,找著找著終於找到Plot Legend Package
(原來重點是我不知道圖例的英文是legend...Orz....其實...我原本根本就不知道我要的東西中文叫做圖例 XD )
不過很奇怪的是,這個package裡面的範例看起來是可以用在listplot上的,但是結果卻失敗!!用在Mathematica 6.0顯示錯誤訊息是listplot沒有這個選項可用....

真是騙人的網頁 .... >.<

總之,上網再搜尋一下
找到了有人問類似的問題(plot legend無法用在listplot上)
先說明一下為什麼我想要用listplot
因為plot這個功能莫名其妙地不能設定每一條線用不同的pointmarker,也就是不能在線上用不同的符號作區隔,只能使用PlotStyle設定虛線、實線。要加點的話則用Mesh選項加,但是顯示結果會變成每一條線都一樣(我實在找不到設定方法)


總之,最後雖然找到用listplot並加上legend的方法(暴力法解決)
但是又面臨另外一個新問題(其實是之前就知道的舊問題)就是listplot如果要讓各點分隔遠一點的話,就會變成折線圖,我要的不是折線圖阿~~~
我要的是曲線圖然後上面加上三角形或方形點作為區隔
總之,我放棄了listplot
最後用暴力法畫出下圖

就這樣吧~花了一整個早上在弄這個
很斜線....
Needs["PlotLegends`"]
ZP = Plot[{ZC, ZS, Zt}, {t, 0, 10},
PlotStyle -> {Directive[Blue, Thick, Dashed],
Directive[Blue, Thick],
Directive[Blue, Thick, Dashing[{0.05, 0.01}]]}, PlotRange -> Full,
AxesLabel -> {t, Profit}, AxesOrigin -> {0, 0}]
l = {{Graphics[{Blue, Dashed, Line[{{5, .7}, {0, .7}}]}],
"Model c"}, {Graphics[{Blue, Thick, Line[{{5, .7}, {0, .7}}]}],
"Model s"}, {Graphics[{Blue, Thick, Dashing[{0.5, 0.1}],
Line[{{5, .7}, {0, .7}}]}], "Model t"}};(*example legend*)
ShowLegend[
Show[ZP, PlotRange -> All], {l, LegendPosition -> {0.6, 0},
LegendSize -> {.5, .3}}]
(*show them all together*)

1 則留言:

匿名 提到...

it's very useful for me, thanks~