A collection of example plots
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