2
$\begingroup$

I was trying to generate a plot with two different y axis, i found a post in the wolfram forum about this topic it's called the TwoAxisPlot but it doesn't work like it's described, here's the code from the wolfram page

TwoAxisPlot[{f_, g_}, {x_, x1_, x2_}] := 
 Module[{fgraph, ggraph, frange, grange, fticks, 
   gticks}, {fgraph, ggraph} = 
   MapIndexed[
    Plot[#, {x, x1, x2}, Axes -> True, 
      PlotStyle -> ColorData[1][#2[[1]]]] &, {f, g}]; {frange, 
    grange} = (PlotRange /. AbsoluteOptions[#, PlotRange])[[
      2]] & /@ {fgraph, ggraph}; fticks = N@FindDivisions[frange, 5]; 
  gticks = Quiet@
    Transpose@{fticks, 
      ToString[NumberForm[#, 2], StandardForm] & /@ 
       Rescale[fticks, frange, grange]}; 
  Show[fgraph, 
   ggraph /. 
    Graphics[graph_, s___] :> 
     Graphics[
      GeometricTransformation[graph, 
       RescalingTransform[{{0, 1}, grange}, {{0, 1}, frange}]], s], 
   Axes -> False, Frame -> True, 
   FrameStyle -> {ColorData[1] /@ {1, 2}, {Automatic, Automatic}}, 
   FrameTicks -> {{fticks, gticks}, {Automatic, Automatic}}]]

this is the example that they give to you

TwoAxisPlot[{Sin[x], 3 Sin[x] + 5 Cos[x]}, {x, 0, 4 Pi}]

this is my code and what i tried

sol = NDSolve[{Ca'[t] == 
    25 - 0.005 Ca[t] - 8 10^12 E^(-22500/(1.987 T[t] )) Ca[t], 
   T'[t] == 
    0.005 (300 - T[t]) + 
     0.01 (8 10^12 E^(-22500/(1.987 T[t] ))) Ca[t] - 
     0.001 (T[t] - 330), Ca[0] == 5000, T[0] == 330}, {Ca, T}, {t, 
   1500}]
Plot[{Ca[t], T[t]} /. sol, {t, 0, 1000}, PlotRange -> All]
TwoAxisPlot[{f_, g_}, {x_, x1_, x2_}] := 
 Module[{fgraph, ggraph, frange, grange, fticks, 
   gticks}, {fgraph, ggraph} = 
   MapIndexed[
    Plot[#, {x, x1, x2}, Axes -> True, 
      PlotStyle -> ColorData[1][#2[[1]]]] &, {f, g}]; {frange, 
    grange} = (PlotRange /. 
        AbsoluteOptions[#, PlotRange])[[2]] & /@ {fgraph, ggraph}; 
  fticks = N@FindDivisions[frange, 5];
  gticks = 
   Quiet@Transpose@{fticks, 
      ToString[NumberForm[#, 2], StandardForm] & /@ 
       Rescale[fticks, frange, grange]};
  Show[fgraph, 
   ggraph /. 
    Graphics[graph_, s___] :> 
     Graphics[
      GeometricTransformation[graph, 
       RescalingTransform[{{0, 1}, grange}, {{0, 1}, frange}]], s], 
   Axes -> False, Frame -> True, 
   FrameStyle -> {ColorData[1] /@ {1, 2}, {Automatic, Automatic}}, 
   FrameTicks -> {{fticks, gticks}, {Automatic, Automatic}}]]

TwoAxisPlot[{Ca[t], T[t]}, {t, 0, 1000}]

this is the example

enter image description here

this is how my plot should be

enter image description here

any idea on how to manipulate the code from the wolfram page to make it work with these functions? here's the link to the article https://reference.wolfram.com/language/howto/GeneratePlotsWithTwoVerticalScales.html

thanks a lot, any help would be kindly and hugely appreciated

$\endgroup$
3
  • 3
    $\begingroup$ Does TwoAxisPlot[{Ca[t], T[t]} /. Flatten@sol, {t, 0, 1000}] give the expected result? $\endgroup$ – LouisB Mar 13 at 8:14
  • 2
    $\begingroup$ You may also be interested in 1 plot / 2 scale and CombinePlots. $\endgroup$ – LouisB Mar 13 at 8:22
  • $\begingroup$ It does, thanks @LouisB $\endgroup$ – Sosa Mar 13 at 17:57