examples.f90 Source File

This File Depends On

sourcefile~~examples.f90~~EfferentGraph sourcefile~examples.f90 examples.f90 sourcefile~array.f90 array.f90 sourcefile~array.f90->sourcefile~examples.f90 sourcefile~plplotlib.f90 plplotlib.f90 sourcefile~array.f90->sourcefile~plplotlib.f90 sourcefile~plplotlib.f90->sourcefile~examples.f90 sourcefile~kinds.f90 kinds.f90 sourcefile~kinds.f90->sourcefile~examples.f90 sourcefile~kinds.f90->sourcefile~array.f90 sourcefile~kinds.f90->sourcefile~plplotlib.f90 sourcefile~text.f90 text.f90 sourcefile~kinds.f90->sourcefile~text.f90 sourcefile~time.f90 time.f90 sourcefile~kinds.f90->sourcefile~time.f90 sourcefile~text.f90->sourcefile~plplotlib.f90 sourcefile~time.f90->sourcefile~text.f90
Help

Source Code


Source Code

program examples_prg
	!! A collection of example plots
	use kinds_mod
	use array_mod
	use plplotlib_mod
	implicit none
	
	call setup(device='svg',fileName='media/example-%n.svg',figSize=[320,240],transparent=.true.)
	
	call doPlot()
	call doScatter()
	call doContour()
	call doLegend()
	call doQuiver()
	call doBar()
	call doFillBetween()
	call doHist()
	call doSurface()
	call doError()
	call doLogPlot()
	
	call show()
	
contains

	subroutine doPlot
		!! ![plot](|media|/example-1.svg)
		integer,parameter::N = 20
		real(wp),dimension(N)::x,y
		
		x = linspace(0.0_wp,1.0_wp,N)
		y = x**2-1.0_wp
		
		call figure()
		call subplot(1,1,1)
		call xylim(mixval(x),mixval(y))
		
		call plot(x,y,lineColor='red',lineWidth=2.0_wp, &
			& markStyle='.',markColor='cyan',markSize=2.0_wp)
		
		call plot(x,-1.0_wp-y,lineColor='blue',lineStyle=':',lineWidth=2.0_wp, &
			& markStyle='+',markColor='green',markSize=1.0_wp)
		
!~ 		call ticks()
		call xticks(primary=.true.,secondary=.false.)
		call yticks(primary=.true.,secondary=.false.)
!~ 		call labels('x','y','f(x)=x#u2#d-1; g(x)=-x#u2#d')
		call xlabel('x')
		call ylabel('y')
		call title('f(x)=x#u2#d-1; g(x)=-x#u2#d')
	end subroutine doPlot

	subroutine doScatter
		!! ![scatter](|media|/example-2.svg)
		integer,parameter::N = 100
		real(wp),dimension(N)::x,y,z
		
		call random_number(x)
		call random_number(y)
		z = sqrt(x**2+y**2)
		
		call figure()
		
		call subplot(2,2,1)
		call xylim([0.0_wp,1.0_wp],[0.0_wp,1.0_wp])
		call scatter(x,y)
		call ticks()
		call labels('x','y','')
		
		call subplot(2,2,2)
		call xylim([0.0_wp,1.0_wp],[0.0_wp,1.0_wp])
		call scatter(x,y,c=z)
		call ticks()
		call labels('x','y','')
		
		call subplot(2,2,3)
		call xylim([0.0_wp,1.0_wp],[0.0_wp,1.0_wp])
		call scatter(x,y,s=(4.0_wp*z+1.0_wp),markColor='blue')
		call ticks()
		call labels('x','y','')
		
		call subplot(2,2,4)
		call xylim([0.0_wp,1.0_wp],[0.0_wp,1.0_wp])
		call scatter(x,y,c=z,s=(4.0_wp*z+1.0_wp))
		call ticks()
		call labels('x','y','')
	end subroutine doScatter

	subroutine doContour
		!! ![contour](|media|/example-3.svg)
		integer,parameter::N = 50
		real(wp),dimension(N)::x,y
		real(wp),dimension(N,N)::z
		integer::i,j
		
		x = linspace(-10.0_wp,10.0_wp,N)
		y = linspace(-10.0_wp,10.0_wp,N)
		forall(i=1:N,j=1:N)
			z(i,j) = sin( sqrt(x(i)**2+y(j)**2) )/sqrt(x(i)**2+y(j)**2)
		end forall
		
		call figure()
		
		call subplot(1,1,1,aspect=1.0_wp)
		call xylim(mixval(x),mixval(y))
		call contourf(x,y,z,10)
		call contour(x,y,z,10)
		call colorbar(z,5)
		call ticks()
		call labels('x','y','')
	end subroutine doContour

	subroutine doLegend
		!! ![legend](|media|/example-4.svg)
		integer,parameter::N = 20
		real(wp),dimension(N)::x,y
		character(32),dimension(3,7)::series
		
		x = linspace(0.0_wp,1.0_wp,N)
		y = x**2-1.0_wp
		
		call figure()
		call subplot(1,1,1)
		call xylim(mixval(x),mixval(y))
		
		call plot(x,y,lineColor='red',lineWidth=2.0_wp, &
			& markStyle='.',markColor='cyan',markSize=2.0_wp)
		
		call plot(x,-1.0_wp-y,lineColor='blue',lineStyle=':',lineWidth=2.0_wp, &
			& markStyle='+',markColor='green',markSize=1.0_wp)
		
		! [name,textColor,lineStyle,lineColor,markStyle,markColor]
		series(1,:) = [character(32)::'f(x)=x#u2#d-1','','-','r','.','c','']
		series(2,:) = [character(32)::'g(x)=-x#u2#d','',':','b','+','g','']
		series(3,:) = [character(32)::'Box','','','','','','r']
		
		call legend('center left',series)
		call ticks()
		call labels('x','y','')
	end subroutine doLegend

	subroutine doQuiver
		!! ![quiver](|media|/example-5.svg)
		integer,parameter::N = 20
		real(wp),dimension(N)::x,y
		real(wp),dimension(N,N)::u,v,m
		integer::i,j
		
		x = linspace(-10.0_wp,10.0_wp,N)
		y = linspace(-10.0_wp,10.0_wp,N)
		forall(i=1:N,j=1:N)
			u(i,j) = -y(j)
			v(i,j) =  x(i)
			m(i,j) = sqrt(u(i,j)**2+v(i,j)**2)
		end forall
		
		call figure()
		
		call subplot(1,1,1,aspect=1.0_wp)
		call xylim(mixval(x),mixval(y))
		call quiver(x,y,u,v,c=m,s=m,scaling=2.0_wp,lineWidth=2.0_wp)
		call colorbar(m,10)
		call ticks()
		call labels('x','y','')
	end subroutine doQuiver

	subroutine doBar
		!! ![bar](|media|/example-6.svg)
		integer,parameter::N = 21
		real(wp),dimension(N)::x,y
		
		x = linspace(-PI,PI,N)
		y = exp(-x**2)
		
		call figure()
		
		call subplot(1,2,1)
		call xylim(mixval(x)+[-0.1_wp,0.1_wp],mixval(y)+[ 0.0_wp,0.1_wp])
		call bar(x,y,c=y,relWidth=1.0_wp)
		call ticks()
		call labels('x','y','')
		
		call subplot(1,2,2)
		call xylim(mixval(y)+[ 0.0_wp,0.1_wp],mixval(x)+[-0.1_wp,0.1_wp])
		call barh(x,y,fillColor='r',relWidth=1.0_wp)
		call ticks()
		call labels('x','y','')
	end subroutine doBar

	subroutine doFillBetween
		!! ![fillBetween](|media|/example-7.svg)
		integer,parameter::N = 51
		real(wp),dimension(N)::x,y1,y2
		
		x = linspace(-3.0_wp,3.0_wp,N)
		y1 = x**2-1.0_wp
		y2 = x**3-1.0_wp
		
		call figure()
		call subplot(1,1,1)
		call xylim(mixval(x),mixval([y1,y2]))
		call fillBetween(x,y1,y2,fillColor='c',fillPattern='#',lineWidth=2.0_wp)
		call plot(x,y1,lineColor='k',lineWidth=3.0_wp)
		call plot(x,y2,lineColor='k',lineWidth=3.0_wp)
		call ticks(color='b',lineWidth=3.0_wp)
		call labels('x','y','f(x)=x#u2#d-1',color='r')
	end subroutine doFillBetween

	subroutine doHist
		!! ![hist](|media|/example-8.svg)
		integer,parameter::N = 10000
		real(wp),dimension(N,12)::r
		real(wp),dimension(N)::x
		real(wp),dimension(:,:),allocatable::h
		
		call random_number(r)
		x = sum(r,2)-6.0_wp
		call figure()
		
		call subplot(1,2,1)
		call xylim(mixval(x),[0.0_wp,1.05_wp])
		call hist(x,20)
		call ticks()
		
		h = binData(x,20,normalize=2)
		call subplot(1,2,2)
		call xylim(mixval(h(:,1)),[0.0_wp,1.05_wp*maxval(h(:,2))])
		call bar(h(:,1),h(:,2),c=h(:,2),relWidth=1.0_wp)
		call ticks()
	end subroutine doHist

	subroutine doSurface
		!! ![surface](|media|/example-9.svg)
		
		integer,parameter::N = 24
		real(wp),dimension(N)::x,y
		real(wp),dimension(N,N)::z
		integer::i,j
		
		x = linspace(-10.0_wp,10.0_wp,N)
		y = linspace(-10.0_wp,10.0_wp,N)
		forall(i=1:N,j=1:N)
			z(i,j) = sin( sqrt(x(i)**2+y(j)**2) )/sqrt(x(i)**2+y(j)**2)
		end forall
		
		call figure()
		
		call subplot(1,1,1,is3d=.true.)
		call xyzlim(mixval(x),mixval(y),mixval(z),zoom=1.1_wp)
		call surface(x,y,z,11)
!~ 		call wireframe(x,y,z,lineColor='k')
		call box('x','y','z')
		
	end subroutine doSurface

	subroutine doError
		!! ![error](|media|/example-10.svg)
		
		integer,parameter::N = 25
		real(wp),dimension(N)::x,y,xe,ye
		real(wp),dimension(12)::r
		real(wp)::m,s
		integer::k
		
		x = linspace(0.0_wp,5.0_wp,N)
		y = 1.0_wp/(x**2+1.0_wp)
		
		do k=1,N
			call random_number(r)
			r = 0.25_wp*(2.0_wp*r-1.0_wp)
			m = sum(r)/real(size(r))
			s = sqrt(sum((r-m)**2)/real(size(r)-1))
			x(k) = x(k)+m
			xe(k) = s
			
			call random_number(r)
			r = 0.15_wp*(2.0_wp*r-1.0_wp)
			m = sum(r)/real(size(r))
			s = sqrt(sum((r-m)**2)/real(size(r)-1))
			y(k) = y(k)+m
			ye(k) = s
		end do
		
		call figure()
		call subplot(1,1,1)
		call xylim(mixval([x-xe,x+xe])+[-0.5_wp,0.5_wp],mixval([y-ye,y+ye])+[-0.2_wp,0.2_wp])
		call errorbar(x,y,xerr=xe,yerr=ye,lineColor='b',lineWidth=1.0_wp)
		call plot(x,y,lineStyle='',markStyle='s',markColor='r',markSize=1.5_wp)
		call ticks()
		call labels('x','y','')
	end subroutine doError

	subroutine doLogPlot
		!! ![logPlot](|media|/example-11.svg)
		
		integer,parameter::N = 25
		real(wp),dimension(N)::x,y,yl
		
		x = linspace(0.0_wp,5.0_wp,N)
		y = exp(-x**2)
		yl = log10(y)
		
		call figure()
		call subplot(1,1,1)
		call xylim(mixval(x),mixval(yl))
		call plot(x,yl,lineColor='r',lineWidth=2.0_wp)
		call ticks(logy=.true.)
		call labels('x [linear]','y [log]','exp(-x#u2#d)')
	end subroutine doLogPlot

end program examples_prg