Multiple graphs with same x-axis but separate y-axis and space
- To: mathgroup at smc.vnet.net
- Subject: [mg40944] Multiple graphs with same x-axis but separate y-axis and space
- From: Nigel King <king at dircon.co.uk>
- Date: Fri, 25 Apr 2003 08:03:26 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Dear MathGroup, Imagine graphs of different sets of data vs time. Say these were wind speed, wind direction, temperature and humidity. Plotting these on one graph overlayed upon one another is confusing. What would be nice is a way to plot them on one graph but with each function in their own vertical space with their own y-axis but all using the same time x-axis. Has anybody achieved this? Below is an illustration of the desired result. _________________________________________________________ 50| | | | | | | | | | | | | | | | wind | | | | | | | | | | | | | | | | 0| | | | | | | | _________________________________________________________ 40| | | | | | | | | | | | | | | | temp | | | | | | | | | | | | | | | | -10| | | | | | | | _________________________________________________________ 100| | | | | | | | | | | | | | | | humid| | | | | | | | | | | | | | | | 20| | | | | | | | ______________________________________________________________ | | | | | | | 23Apr03 12:00 24Apr03 12:00 24Apr03 12:00 24Apr03 I submit the functions below which do a tolerable job of creating the x- axis labels and grid. I would really like some simle functions to dived and conquer the y-axis problem. TIA Nigel King DateScale[minimum_, maximum_, n_Integer:8] := Map[DateTicks,DateGrid[minimum, maximum, n]]; DateGrid[minimum_, maximum_, n_Integer:8] := Module[{w, r = maximum - minimum, spacing}, spacing = r/n; w = First[Select[Join[{1, 2, 5, 10, 15, 20, 30}*60, {1, 2, 3, 4, 6, 12}*60*60, {1, 2, 3, 7, 14, 31, 62, 92, 123, 184, 366, 2 366,3 366, 4 366, 5 366}*24*60*60], (spacing <= #) &]]; If[w < 28*24*60*60, Range[Round[minimum/w]*w,maximum, w], d1 = {}; For[i = iMonth[minimum, w], i < maximum, i = iMonth[i + w], AppendTo[d1, i]]]]; DateString[x_] := Module[{d = ToDate[Evaluate[Round[x]]]}, If[d[[4]] === 0 && d[[5]] === 0, ToString[d[[3]]] <> "" <>StringTake[ "JanFebMarAprMayJunJulAugSepOctNovDec", {d[[2]]*3 - 2, d[[2]]*3}] <> "" <> StringTake[ToString[d[[1]]], -2], ToString[d[[4]]] <> ":" <> StringTake["0" <> ToString[d[[5]]], -2]]]; DateTicks[x_] := {x, DateString[x]}; iMonth[x_] := Module[{y = ToDate[Round[x]]}, y = FromDate[{y[[1]], y[[2]], 1, 0, 0, 0}]]; iMonth[x_, w_] := Module[{ y = ToDate[Round[x]], w1 = Round[w/24/60/60/30]}, y = FromDate[{y[[1]], Round[y[[2]]/w1]w1 + 1, 1, 0, 0, 0}]];