Re: [問題] 兩個 x 軸的圖
看板Mathematica作者chungyuandye (養花種魚數月亮賞星星)時間13年前 (2011/09/20 13:00)推噓0(0推 0噓 0→)留言0則, 0人參與討論串2/2 (看更多)
※ 引述《oversky0 (oversky0)》之銘言:
: 我有兩個函數
: y = f(x1);
: y = f(x2);
: 請問如何將這兩個函數畫在同一張圖上,
: 並且同時顯示 x1, x2 兩個軸向刻度?
最近剛好有需要,自己寫了一個
myplot[{f_,g_},range_List,color_List]:=
Block[{p1,p2,a1,a2,a3,b1,b2,myrange=range,mycolor=color},
(* 先畫出fun1 fun2 ,但不輸出 *)
p1=Plot[f,{x,myrange[[1]],myrange[[2]]},Axes->False,Frame->True];
p2=Plot[g,{x,myrange[[1]],myrange[[2]]},Axes->False,Frame->True];
(*取出fun1 刻度 *)
a1=AbsoluteOptions[p1,FrameTicks][[1,2,2]];
(*取出fun2 刻度 *)
a2=AbsoluteOptions[p2,FrameTicks][[1,2,2]];
(* 對fun2 的刻度做轉換 *)
b1=p1[[-1,4,-1,-1]];
b2=p2[[-1,4,-1,-1]];
a3=MapThread[
Insert[#1,#2,1]&,{a2[[All,2;;-1]],
b1[[1]]+((b1[[2]]-b1[[1]])/(b2[[2]]-b2[[1]])*(#-
b2[[1]]))&/@a2[[All,1]]}];
(* 轉換fun2 ,並將 轉換後fun2 的刻度作為frametick *)
(* 如果需要其他設定,直接放在ImageSize後面即可 *)
Plot[{f,b1[[1]]+((b1[[2]]-b1[[1]])/(b2[[2]]-b2[[1]])*
(g-b2[[1]]))},{x,myrange[[1]],myrange[[2]]},
PlotStyle->{{Thickness[0.01],mycolor[[1]]},
{Thickness[0.01],mycolor[[2]]}},
Axes->False,Frame->True,
FrameTicks->{{a1,a3},{Automatic,None}},
ImageSize->500]]
usage: myplot[{fun1,fun2},range,{color1,color2}]
myplot[{0.25 Cos[x], 0.5 + Abs@Sin[x]}, {0, 2 Pi}, {Red, Blue}]
--
養花種魚數月亮賞星星
http://chungyuandye.twbbs.org
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.173.129.153
※ 編輯: chungyuandye 來自: 218.173.129.153 (09/20 13:26)
討論串 (同標題文章)
Mathematica 近期熱門文章
PTT數位生活區 即時熱門文章