ขอต้อนรับ ผู้มาเยือน กรุณา ล็อกอิน หรือ สมัครสมาชิก

ล็อกอินด้วยชื่อผู้ใช้ รหัสผ่่าน และระยะเวลาใช้งาน

 
Advanced search

41244 Posts in 6175 Topics- by 8109 Members - Latest Member: dirac333
mPEC Forumบทเรียนการใช้โปรแกรม Mathematica (Moderator: psaipetc)ถามเรื่องการ plot สองแกน
Pages: 1   Go Down
Print
Author Topic: ถามเรื่องการ plot สองแกน  (Read 3469 times)
0 Members and 1 Guest are viewing this topic.
Theeraphot
neutrino
*
Offline Offline

Posts: 30

อะไรคือความจริง...


« on: June 08, 2009, 01:45:15 PM »

Mathematica สามารถทำการ plot สองแกนบนแกนกราฟเดียวกันได้ไหมครับ ผมเห็นที่เค้า post code เค้าเขียนเป็น function ขึ้นมาเอง แล้วก็ทำได้แค่ Plot แต่ที่ผมสนใจคือการใช้กับ ListPlot น่ะครับ จะมีทางเป็นไปได้ไหม?

ยกตัวอย่างการ plot ที่กล่าวถึง อย่างเช่นใน excel เราสามารถเลือกแกนเอก แกนโท ได้ ให้มันแสดงในกราฟเดียวกัน แต่ผมลองๆหาวิธีใน mathematica แล้ว ทำไม่เป็นจริงๆ
« Last Edit: June 08, 2009, 01:47:59 PM by ปิยพงษ์ - Head Admin » Logged
Bright
neutrino
*
Offline Offline

Posts: 212

เราเป็นอย่างไร สังคมเป็นอย่างนั้น


« Reply #1 on: June 08, 2009, 09:22:39 PM »

ลองดูที่นี่ครับ
http://forums.wolfram.com/mathgroup/archive/2009/Jan/msg00668.html
เค้าสร้าง function ขึ้นมาใหม่คือ TwoAxisPlot สำหรับแสดงกราฟ functionตัวแปรเดียว สองfunction  กับ TwoAxisListPlot สำหรับแสดงกราฟของข้อมูลสองชุด

TwoAxisPlot[{f_, g_}, {x_, x0_, x1_}, color1_, color2_,
  opts : OptionsPattern[]] :=
 Module[{f0, f1, g0, g1, gp, scale, gticks}, {f0, f1} =
   Options[Plot[f, {x, x0, x1}, Frame -> True, opts], PlotRange][[1,
     2, 2]];
  {g0, g1} =
   Options[gp = Plot[g, {x, x0, x1}, Frame -> True, opts],
     PlotRange][[1, 2, 2]];
  scale[y_] := f0 + ((f1 - f0) (y - g0))/(g1 - g0);
  gticks =
   Apply[{scale[#1], ##2} &,
    AbsoluteOptions[gp, FrameTicks][[1, 2, 2]], {1}];
  Plot[{f, scale[g]}, {x, x0, x1}, PlotRange -> 1.001 {f0, f1},
   Frame -> True,
   FrameTicks -> {{Automatic, gticks}, {Automatic, Automatic}},
   PlotStyle -> {{color1}, {color2}},
   FrameStyle -> {{color1, color2}, {{}, {}}}, opts]]



TwoAxisListPlot[f_List, g_List, frange_, grange_, color1_, color2_,
  opts___?OptionQ] :=
 Module[{old, new, scale, fm, fM, gm, gM, newg}, {fm, fM} = frange;
  {gm, gM} = grange;
  scale[var_] := ((var - gm) (fM - fm))/(gM - gm) + fm;
  old = AbsoluteOptions[
     ListPlot[g, Frame -> True, PlotRange -> grange,
      DisplayFunction -> Identity], FrameTicks][[1, 2, 2]];
  new = (Prepend[Rest[#1], scale[First[#1]]] &) /@ old;
  newg = Transpose[{Transpose[g][[1]],
     Map[scale, Transpose[g][[2]], {1, 2}]}];
  ListLinePlot[{f, newg}, Frame -> True,
   FrameTicks -> {Automatic, Automatic, None, new},
   PlotStyle -> {{color1}, {color2}},
   FrameStyle -> {{}, {color1}, {}, {color2}},
   PlotRange -> frange*(1 + .05 (fM - fm)), opts]]


ทดลองเช่น

TwoAxisPlot[{Sin[ x], Sqrt[ x]}, {x, 0, 4}, Red, Blue]



ls1 = Table[{i, Sin[ i]}, {i, 0, 4, 0.02}];
ls2 = Table[{i, Sqrt[ i]}, {i, 0, 4, 0.02}];
TwoAxisListPlot[ ls1, ls2, {-1, 1}, {0, 2}, Red, Blue]

Logged
Theeraphot
neutrino
*
Offline Offline

Posts: 30

อะไรคือความจริง...


« Reply #2 on: June 09, 2009, 02:13:36 PM »

ขอบคุณครับ
Logged
Pages: 1   Go Up
Print
Jump to: