file qdrawcode.txt Maxima code from sections of Ch. 5 of Maxima by Example, E.L. Woollett Jan., 2009 version 5.1 Quick Plots for Explicit Functions: ex(...) (%i1) load(draw)$ (%i2) load(qdraw)$ (%i3) qdraw( ex( [x,x^2,x^3],x,-3,3 ) )$ (%i4) qdraw( ex([x,x^2,x^3],x,-3,3 ),yr(-2,2) )$ (%i5) qdraw(ex([x,x^2,x^3],x,-3,3 ),yr(-2,2), lw(6))$ (%i6) qdraw( ex( [x,x^2,x^3],x,-3,3 ),yr(-2,2),lw(6),key(bottom) )$ (%i7) qdraw( ex( [x,x^2,x^3],x,-3,3 ),yr(-2,2), lw(6),key(bottom), cut(grid, xyaxes) )$ (%i8) qdraw( ex( [x,x^2,x^3],x,-3,3 ),yr(-2,2), lw(6), cut( all ) )$ (%i9) qdraw( ex([x,x^2,x^3],x,-3,3 ),yr(-2,2),lw(6), key(bottom),pts( [ [-1,-1],[0,0],[1,1] ] ) )$ (%i10) qdraw( ex( [x,x^2,x^3],x,-3,3 ),yr(-2,2), lw(6),key(bottom), pts([ [-1,-1],[0,0],[1,1] ],ps(2),pc(magenta) ) )$ (%i11) qdraw( ex( [x,x^2,x^3],x,-3,3 ),yr(-2,2), lw(6),key(bottom), pts([ [-1,-1],[0,0],[1,1] ],ps(2),pc(magenta),pk("intersections") ) )$ (%i12) qdraw( ex( [x,x^2,x^3],x,-3,3 ),yr(-2,2), lw(6),key(bottom), line(-3,0,3,0,lw(2)),line(0,-2,0,2,lw(2)), pts([ [-1,-1],[0,0],[1,1] ],ps(2),pc(magenta),pk("intersections")), pic(eps,"ch5p9") )$ (%i13) qdraw( yr(-2,2),lw(6), ex( [x,x^2,x^3],x,-3,3 ), key(bottom), ex(sin(3*x)*exp(x/3),x,-3,3), pts([ [-1,-1],[0,0],[1,1] ]) )$ (%i14) qdraw( yr(-2,2),lw(6), ex( [x,x^2,x^3],x,-3,3 ), key(bottom), ex(sin(3*x)*exp(x/3),x,-3,3), pts([ [-1,-1],[0,0],[1,1] ]) , label(["qdraw at work",-2.9,1.5]), pic(eps,"ch5p11",font("Times-Bold",20) ) ); (%i15) qdraw( yr(-2,2),lw(6), ex( [x,x^2,x^3],x,-3,3 ), key(bottom), ex(sin(3*x)*exp(x/3),x,-3,3), pts([ [-1,-1],[0,0],[1,1] ]) , label(["qdraw at work",-2.9,1.5]), pic(jpg,"ch5p11",font("c:/windows/fonts/timesbd.ttf",20) ) ); 5.2 Quick Plots for Implicit Functions: imp(...) (%i16) qdraw( imp( sin(2*x)*cos(y)=0.4,x,-3,3,y,-3,3 ) , cut(key) ); (%i17) qdraw( imp( [sin(2*x)*cos(y)=0.4, sin(2*x)*cos(y)=0.7, sin(2*x)*cos(y)=0.9] ,x,-3,3,y,-3,3 ) , cut(key) ); (%i18) g : sin(2*x)*cos(y)$ (%i19) qdraw( imp( [g = 0.4,g = 0.7,g = 0.9] ,x,-3,3,y,-3,3 ) , cut(key) )$ (%i20) qdraw( imp( [g = 0.4,g = 0.7,g = 0.9] ,x,-%pi,%pi,y,-%pi,%pi ) , cut(key) )$ (%i21) qdraw( imp( [g = 0.4,g = 0.7,g = 0.9] ,x,-4.2,4.2,y,-3,3 ) , cut(key) )$ 5.3 Contour Plots with contour(...) (%i22) qdraw( contour(g, x,-4.2,4.2, y,-3,3, cvals(0.4,0.7,0.9) ) )$ (%i23) qdraw( contour(g,x,-4.2,4.2,y,-3,3,cvals(0.4,0.7,0.9), lw(2),lc(brown) ), ipgrid(15) )$ (%i24) qdraw( contour(g,x,-4.2,4.2,y,-3,3,crange(4,0.2,0.9), lw(2),lc(brown) ), ipgrid(15) )$ (%i25) qdraw( contour(sin(x)*sin(y),x,-2,2,y,-2,2,crange(4,0.2,0.9), lw(3),lc(blue),add(xyaxes) ), ipgrid(15) )$ 5.4 Density Plots with qdensity(...) (%i26) qdensity(x*y,[x,0,1,0.2],[y,0,1,0.2] )$ (%i27) qdensity(x*y,[x,0,1,0.2],[y,0,1,0.2], palette(gray) )$ (%i28) qdensity(x*y,[x,0,1,0.05],[y,0,1,0.05] )$ (%i29) qdensity(sin(x)*sin(y),[x,-2,2,0.05],[y,-2,2,0.05] )$ 5.5 Explicit Plots with Greater Control: ex1(...) (%i30) qdraw( xr(-1.4,2.8),yr(-1,2), ex1(x^2,x,-2,2,lw(5),lc(brown),lk("X^2")), ex1(2*x-1,x,-2,2,lw(2),lc(blue),lk("TANGENT")), ex1(-x/2 + 3/2,x,-2,2,lw(2),lc(magenta),lk("NORMAL") ) , pts( [ [1,1] ],ps(2),pc(red) ) )$ (%i31) qdraw( ex1(bessel_j(0,x),x,0,20,lc(red),lw(6),lk("bessel_j ( 0, x)") ), ex1(bessel_j(1,x),x,0,20,lc(blue),lw(5),lk("bessel_j ( 1, x)")), ex1(bessel_j(2,x),x,0,20,lc(brown),lw(4),lk("bessel_j ( 2, x)") ), ex1(bessel_j(3,x),x,0,20,lc(green),lw(3),lk("bessel_j ( 3, x)") ) )$ (%i32) qdraw( ex1(bessel_j(0, sqrt(x)),x,0,50 ,lc(blue), lw(7),lk("J0( sqrt(x) )") ) , line(0,0,50,0,lc(red),lw(2) ) )$ 5.6 Explicit Plots with ex1(...) and Log Scaled Axes (%i33) g : x*exp(-x)$ (%i34) qdraw( ex1( log(g),x,0.001,10, lc(red) ),yr(-8,0) )$ (%i35) qdraw( ex1(g, x, 0.001,10,lc(red) ), yr(0.0001, 1), log(y) )$ (%i36) qdraw( ex1(g, x, 0.001,10,lc(red),lw(7) ), yr(0,0.4), log(x) )$ (%i37) qdraw( ex1(g, x, 0.001,10,lc(red) ), yr(0.0001,1), log(xy) )$ 5.7 Data Plots with Error Bars: pts(...) and errorbars(...) (%i38) printfile("fit1.dat")$ (%i39) plist : read_nested_list("fit1.dat"); (%i40) qdraw( pts(plist) )$ (%i41) qdraw( pts(plist, ps(2)), xr(0,12),yr(0,15) )$ (%i42) qdraw( pts(plist,pc(blue),pk("fit1"), ps(2)), xr(0,12),yr(0,15), key(bottom), errorbars( plist, 1) )$ (%i43) qdraw( pts(plist,pc(blue),pk("fit1"), ps(2)), xr(0,12),yr(0,15), key(bottom), errorbars( plist, 1, lw(3),lc(red) ) )$ (%i44) dyl : [0.2,0.3,0.5,1.5,0.8,1,1.4,1.8,2,2]$ (%i45) map(length,[plist,dyl] ); (%i46) qdraw( pts(plist,pc(blue),pk("fit1"), ps(2)), xr(0,12),yr(0,15), key(bottom), errorbars( plist, dyl, lw(3),lc(red) ) )$ (%i47) display2d:false$ (%i48) pmatrix : apply( 'matrix, plist ); (%i49) load(lsquares); (%i50) soln : (lsquares_estimates(pmatrix,[x,y],y=a*x+b, [a,b]), float(%%) ); (%i51) [a,b] : (fpprintprec:5, map( 'rhs, soln[1] ) )$ (%i52) [a,b]; (%i53) qdraw( pts(plist,pc(blue),pk("fit1"), ps(2)), xr(0,12),yr(0,15), key(bottom), errorbars( plist, dyl, lw(3),lc(red) ), ex1( a*x + b,x,0,12, lc(brown),lk("linear fit") ) )$ (%i54) printfile("fit2.dat"); (%i55) p2list: read_nested_list("fit2.dat"); (%i56) qdraw( pts(plist,pc(blue),pk("fit1"), ps(2)), xr(0,12),yr(0,15), key(bottom), errorbars( plist, dyl, lw(3),lc(red) ), ex1( a*x + b,x,0,12, lc(brown),lk("linear fit 1") ), pts(p2list, pc(magenta),pk("fit2"),ps(2)), errorbars( p2list,0.5,lw(3) ) )$ 5.8 Implicit Plots with Greater Control: imp1(...) (%i1) eqn1 : 5*x^2 + 4*x*y + 8*y^2 - 16*x + 8*y - 16 = 0$ (%i2) eqn2 : y+1 = 2*(x-2)$ (%i3) eqn3 : y+1 = -(x-2)/2$ (%i4) qdraw( imp1(eqn1,x,-2,6.4,y,-4,2,lc(red),lw(6),lk("ELLIPSE")), imp1(eqn2,x,-2,6.4,y,-4,2,lc(blue),lw(4),lk("ROT X AXIS")), imp1(eqn3,x,-2,6.4,y,-4,2,lc(brown),lw(4),lk("ROT Y AXIS") ), pts([ [2,-1] ],ps(2),pc(magenta),pk("TRANSLATED ORIGIN") ) )$ (%i5) qdraw( imp1(y^3=x^2,x,-3,3,y,-1,3,lw(10),lc(dark-blue)) )$ 5.9 Parametric Plots with para(...) (%i6) qdraw(xr(-1.5,2),yr(-2,2), para(sin(t),sin(2*t),t,0,2*%pi ) , pts( [ [sin(%pi/8),sin(%pi/4)] ],ps(2),pc(blue),pk("t = pi/8")), pts( [ [1,0] ],ps(2),pc(red),pk("t = pi/2")) )$ (%i7) qdraw(xr(-3,4),yr(-1,40), para(2*cos(u),u^2,u,0,2*%pi) , pts([ [2,0] ],ps(2),pc(blue),pk("u = 0")), pts( [ [0,(%pi/2)^2] ],ps(2), pc(red), pk("u = pi/2")), pts([ [-2,%pi^2]],ps(2),pc(green),pk("u = pi")), pts( [[0,(3*%pi/2)^2]],ps(2),pc(magenta),pk("u = 3*pi/2")) )$ 5.10 Polar Plots with polar(...) (%i8) qdraw( polar(10/t,t,1,3*%pi,lc(brown),lw(5)),nticks(200), xr(-4,6),yr(-3,9),key(bottom) , pts( [[10*cos(1),10*sin(1)]],ps(3),pc(red),pk("t = 1 rad")), pts([[5*cos(2),5*sin(2)]],ps(3),pc(blue),pk("t = 2 rad") ), line(0,0,5*cos(2),5*sin(2)) )$ 5.11 Geometric Figures: line(...) (%i9) qdraw( line(0,0,1,1) )$ (%i10) qdraw( line(0,0,1,1,lc(blue),lw(6),lk("radius") ), xr(0,2),yr(0,2),key(bottom), pts([ [1,1] ] ,pc(red),pk("point")) )$ (%i11) load(doplot1)$ (%i12) doplot1(20)$ 5.12 Geometric Figures: rect(...) (%i13) qdraw( xr(-1,2),yr(-1,2),rect(0,0,1,1) )$ (%i14) qdraw( xr(-1,2),yr(-1,2), rect(0,0,1,1,lw(5),lc(brown),fill(khaki) ) )$ (%i15) qdraw( xr(-3,3),yr(-3,3), rect( -2.5,-2.5,2.5,2.5,lw(4),lc(blue) ), rect( -2,-2,2,2,lw(4),lc(red) ), rect( -1.5,-1.5,1.5,1.5,lw(4),lc(green) ), rect( -1,-1,1,1,lw(4),lc(brown) ), rect( -.5,-.5,.5,.5,lw(4),lc(magenta) ), cut(all) )$ 5.13 Geometric Figures: poly(...) (%i16) qdraw( xr(-2,2),yr(-1,2),cut(all), poly([ [-1,-1],[1,-1], [2,2] ] ) )$ (%i17) load(doplot2)$ (%i18) doplot2()$ 5.14 Geometric Figures: circle(...) and ellipse(...) (%i19) qdraw( xr(-2, 2), yr(-2, 2), circle( 0, 0, 1 ) )$ (%i20) qdraw(xr(-2.1,2.1),yr(-1.5,1.5),cut(all), circle(0,0,1,lw(5),lc(brown),fill(khaki) ), line(-1.5,-1.5,1.5,1.5,lw(8), lc(red) ), key(bottom) )$ (%i21) qdraw(xr(-2.1,2.1),yr(-1.5,1.5),cut(all), line(-1.5,-1.5,1.5,1.5,lw(8),lc(red) ), circle(0,0,1,lw(8),lc(brown),fill(khaki) ), key(bottom) )$ (%i22) qdraw( xr(-4.2,4.2),yr(-3,3), ellipse(0,0,3,2,90,270) )$ (%i23) qdraw( xr(-5.6,5.6),yr(-4,4),ex1(x,x,-4,4,lc(blue),lw(5)), ex1(4*cos(x),x,-4,4,lc(red),lw(5) ), ellipse(0,0,3,1,90,270,lc(brown),lw(5),fill(khaki)) , cut(all) )$ 5.15 Geometric Figures: vector(..) (%i24) qdraw( xr(-2,2), yr(-2,2), vector( [-1,-1], [2,2] ) )$ (%i25) qdraw(xr(-2,2),yr(-2,2), vector([-1,-1],[2,2],lw(5),lc(brown),lk("vec 1")), key(bottom) )$ (%i26) qdraw(xr(-2,2),yr(-2,2), vector([0,0],[1,1],lw(5),lc(blue),lk("vec 1"), ht(e),hb(t),ha(45) ), key(bottom) )$ (%i27) qdraw(xr(-2.8,2.8),yr(-2,2), vector([0,0],[1,1],lw(5),lc(blue),lk("vec 1"), ht(e),hb(t),ha(45) ), vector([0,0],[-1,-1],lw(5),lc(red),lk("vec 2")), key(bottom) )$ 5.16 Geometric Figures: arrowhead(..) (%i28) qdraw(xr(-2.8,2.8),yr(-2,2), arrowhead(1.5,0,180,.3),arrowhead(0,1,270,.3), arrowhead(-1.5,0,0,.3),arrowhead(0,-1,90,.3) )$ 5.17 Labels with Greek Letters 5.17.1 Enhanced Postscript Methods (%i29) qdraw(xr(0,2.8),yr(0,2), line(0,0,2.8,0,lw(2)), line(0,0,2,2,lc(blue),lw(8) ), ellipse(0,0,1,1,0,45 ), arrowhead(0.707,0.707,135,0.15), label(["{/=36 {/Symbol q \\254 } The Incline Angle}",1,0.4]), cut(all), pic(eps,"ch5p52" ) ); (%i30) qdraw(xr(-3,3),yr(-2,2),label_align(c), label( ["{/=48 a b c d e f g h i j k l m}",0,1.5] ), label( ["{/Symbol=48 a b c d e f g h i j k l m}",0,0.5] ), label( ["{/=48 n o p q r s t u v w x y z}",0,-.5] ), label( ["{/Symbol=48 n o p q r s t u v w x y z}",0,-1.5] ), cut(all), pic(eps,"ch5p53") )$ (%i31) qdraw(xr(-3,3),yr(-2,2),label_align(c), label( ["{/=48 A B C D E F G H I J K L M}",0,1.5] ), label( ["{/Symbol=48 A B C D E F G H I J K L M}",0,0.5] ), label( ["{/=48 N O P Q R S T U V W X Y Z}",0,-.5] ), label( ["{/Symbol=48 N O P Q R S T U V W X Y Z}",0,-1.5] ), cut(all), pic(eps,"ch5p54") )$ (%i32) s1 : "{/Symbol=48 \\243 \\245 \\253 \\254 \\256}"$ (%i33) s2 : "{/Symbol=48 \\261 \\263 \\264 \\271 \\273 \\345 \\362}"$ (%i34) qdraw(xr(-3,3),yr(-2,2),label_align(c), label( [s1,0,1] ), label( [s2,0,-1] ), cut(all), pic(eps,"ch5p55") )$ 5.17.2 Windows Fonts Methods with jpeg Files (%i35) qdraw(xr(0,2.8),yr(0,2), line(0,0,2.8,0), line(0,0,2,2,lc(blue),lw(5) ), ellipse(0,0,1,1,0,45 ), arrowhead(0.707,0.707,135,0.15), label(["q",1,0.4]), cut(all), pic(jpg,"ch5p52p",font("c:/windows/fonts/grii.ttf",36)) ); (%i36) qdraw(xr(-3,3),yr(-2,2), label(["a b c d e f g h i j k l m",-2.5,1.5], ["n o p q r s t u v w x y z",-2.5,0.5], ["A B C D E F G H I J K L M",-2.5,-0.5], ["N O P Q R S T U V W X Y Z",-2.5,-1.5] ), cut(all), pic(png,"ch5p60",font("c:/windows/fonts/grii.ttf",24)) ); 5.17.3 Using Windows Fonts with the Gnuplot Console Window (See text for converting "q" to Greek letter theta.) (%i37) qdraw(xr(0,2.8),yr(0,2), line(0,0,2.8,0), line(0,0,2,2,lc(blue),lw(5) ), ellipse(0,0,1,1,0,45 ), arrowhead(0.707,0.707,135,0.15), label(["q",1,0.4]), cut(all) )$ 5.18 Even More with more(...) (%i38) qdraw( lw(8), ex([x,x^2,x^3],x,-2,2), more(xlabel = "X AXIS", title="intersections of x, x^2, x^3" ), cut(key),line(-2,0,2,0,lw(2)),line(0,-8,0,8,lw(2)), vector([-1,5],[-0.4,-2.7],lc(red),hl(0.1) ), label(["x^2",-0.9,6]), vector([-1.2,-6],[-0.5,0],lc(turquoise),lw(8)), label( ["x^3", -1,-5.5] ), pts( [[-1,-1],[0,0],[1,1]],ps(2),pc(magenta) ), pic(eps,"ch5p56",font("Times-Roman",28)) )$