How do I plot 3 subplots in the same display window? python
37,666
Well...It looks like you are doing the plotting part correctly. The code below gives you the figure further below.
from pylab import *
subplot(3,1,1)
plot(arange(33))
subplot(3,1,2)
plot(arange(44))
subplot(3,1,3)
plot(arange(55),'r')
Your code does have some problems though, the first thing I found was that your t and x vectors aren't the same size.
Author by
Randy
Updated on December 10, 2020Comments
-
Randy over 3 years
# Import plotting routines from pylab import * # 1D ODE that has a pitchfork bifurcation # x_dot = r * x - x * x * x def PitchforkODE(r,x): return r * x - x * x * x # 1D Euler def OneDEuler(r,x,f,dt): return x + dt * f(r,x) # Improved 1D Euler def ImprovedOneDEuler(r,x,f,dt): xtemp = x + dt * f(r,x) return x + dt * ( f(r,x) + f(r,xtemp) ) / 2.0 # 4th Order Runge-Kutta Euler Method def RKOneD(r,x,f,dt): k1 = dt * f(r,x) k2 = dt * f(r,x + k1/2.0) k3 = dt * f(r,x + k2/2.0) k4 = dt * f(r,x + k3) return x + ( k1 + 2.0 * k2 + 2.0 * k3 + k4 ) / 6.0 # Integrator function that calls one of the three functions # Fills up array def Integrator(x1,x2,x3,x4,t,N,Func,dt): for n in xrange(0,N): x1.append( Func(r,x1[n],PitchforkODE,dt) ) x2.append( Func(r,x2[n],PitchforkODE,dt) ) x3.append( Func(r,x3[n],PitchforkODE,dt) ) x4.append( Func(r,x4[n],PitchforkODE,dt) ) t.append( t[n] + dt ) # Simulation parameters # Integration time step dt = 0.2 # Control parameter of the pitchfork ODE: r = 1.0 # Set up arrays of iterates for four different initital conditions x1 = [ 0.1] x2 = [-0.1] x3 = [ 2.1] x4 = [-2.1] x5 = [ 0.1] x6 = [-0.1] x7 = [ 2.1] x8 = [-2.1] x9 = [ 0.1] x10 = [-0.1] x11 = [ 2.1] x12 = [-2.1] # Time t = [ 0.0] # The number of time steps to integrate over N = 50 #The different functions a = OneDEuler b = ImprovedOneDEuler c = RKOneD # Setup the plot subplot(3,1,1) Func = a Integrator(x1,x2,x3,x4,t,N,Func,dt) ylabel('x(t)') # set y-axis label title(str(Func.func_name) + ': Pitchfork ODE at r= ' + str(r)) # set plot title axis([0.0,dt*(N+1),-2.0,2.0]) # Plot the time series plot(t,x1,'b') plot(t,x2,'r') plot(t,x3,'g') plot(t,x4,'m') subplot(212) Func = b Integrator(x5,x6,x7,x8,t,N,Func,dt) ylabel('x(t)') # set y-axis label title(str(Func.func_name) + ': Pitchfork ODE at r= ' + str(r)) # set plot title axis([0.0,dt*(N+1),-2.0,2.0]) # Plot the time series plot(t,x5,'b') plot(t,x6,'r') plot(t,x7,'g') plot(t,x8,'m') subplot(3,1,3) Func = c Integrator(x9,x10,x11,x12,t,N,Func,dt) xlabel('Time t') # set x-axis label ylabel('x(t)') # set y-axis label title(str(Func.func_name) + ': Pitchfork ODE at r= ' + str(r)) # set plot title axis([0.0,dt*(N+1),-2.0,2.0]) # Plot the time series plot(t,x9,'b') plot(t,x10,'r') plot(t,x11,'g') plot(t,x12,'m')
I'm trying to plot 3 different subplots on the same display window. One on top of the other. So basically, 3 rows 1 column. Each plot represents a different function a, b or c. Each plot should have 4 different lines.