Rename *ll* and *ul* to ll and ul in easy-subs
[maxima.git] / share / draw / draw_gnuplot.dem
blob17e775cfc6435af9f1f3d57eb6caa27d5a25f01f
1 /* Testing Maxima's package draw with Gnuplot
2  *
3  * To run this test package, type
4  *  demo ("draw_gnuplot.dem") $
5  *
6  */
8 load("draw") $
11 ("Axes with different styles")$
12 draw2d(
13   explicit(x^3,x,-1,1),
14   xaxis       = true,
15   xaxis_color = blue,
16   yaxis       = true,
17   yaxis_width = 2,
18   yaxis_type  = solid,
19   yaxis_color = "#f3b507")$
22 ("Function defined by intervals")$
23 draw2d(
24   color = green,
25   explicit(u^2,u,-2,2), 
26   explicit(sin(z),z,2,6),
27   title = "My Title") $
30 ("Rational function with asymptotes")$
31 draw2d(
32   grid   = true,
33   key    = "y = x^2/(x-2)",
34   yrange = [-10,20],
35   color  = red,
36   explicit(x^2/(x-2),x,-9,15),
37   key       = "",
38   line_type = dots,
39   color     = blue,
40   explicit(x+2,x,-9,15),
41   nticks = 70,
42   parametric(2,t,t,-10,20),
43   head_length = 0.3,
44   color     = black,
45   line_type   = solid,
46   vector([5.35,2.45],[-1.53,3.25]),
47   vector([-1,7.5],[3,0]),
48   label_alignment = left,
49   label(["y = x+2",6,2.5]),
50   label_alignment = right,
51   label(["x = 2",-1.7,7.5]) ) $
54 ("Functions by name")$
55 ( F(x) := x^2,
56   G(x) := x^3,
57   H(x) := if x < 0 then x^4 - 1 else 1 - x^5,
58   draw2d (
59     explicit(F, u, -1, 1),
60     color = navy,
61     line_width = 2.5,
62     explicit(G, r, -1, 1),
63     color = "#45baf9",
64     line_width = 3,
65     explicit(H, s, -1, 1),
66     yrange = [-1.5, 1.5]) )$
69 ("Logarithmic scales")$
70 draw2d(
71   logy=true,
72   xlabel = "x",
73   ylabel = "log(y)",
74   color  = red,
75   explicit(exp(x),x,0.1,20),
76   axis_top   = false,
77   axis_right = false,
78   grid       = true,
79   title      = "Logarithmic scale")$
82 ("Playing with tics")$
83 draw2d(
84   xlabel     = "User selected tics on axis",
85   ylabel     = "Rotated labeled tics",
86   xtics      = {-1/2,-1/4,3/4}, /* set of numbers */
87   xtics_axis = true,            /* plot tics on x-axis */
88   ytics      = {["High",0.75],["Medium",0],["Low",-0.75]},
89   ytics_rotate = true,
90   grid       = true,
91   explicit(x^3,x,-1,1) )$
94 ("Shadowed area")$
95 ( f1: 2*x^2-5*x+3,
96   f2: -8*x^2-x+30,
97   [x1,x2]: map('rhs, solve(f1=f2)),
98   draw2d(
99     title       = "Region bounded by two functions",
100     fill_color  = grey,
101     filled_func = f2,
102     explicit(f1,x,x1,x2),
103     filled_func = false,
104     xaxis       = true,
105     xtics_axis  = true,
106     yaxis       = true,
107     line_width  = 2,
108     key         = string(f1),
109     color       = red,
110     explicit(f1,x,-3,3),
111     key         = string(f2),
112     color       = blue,
113     explicit(f2,x,-3,3)) )$
116 ("Complex values in 2D")$
117 draw2d( 
118     explicit(sqrt(x^2-4*x)-x, x, -1, 5),
119     color = red,
120     draw_realpart = false,
121     explicit(sqrt(x^2-4*x)-x+2, x, -1, 5) )$
124 ("Complex values in 3D")$
125 draw3d(
126     enhanced3d = x,
127     explicit(sqrt(x+y),x,-1,1,y,-1,1),
128     color = red,
129     draw_realpart = false,
130     enhanced3d = y,
131     explicit(sqrt(x+y)+1,x,-1,1,y,-1,1) )$
134 ("Bars")$
135 draw2d(
136   key          = "Group A",
137   fill_color   = blue,
138   fill_density = 0.2,
139   bars([0.8,5,0.4],[1.8,7,0.4],[2.8,-4,0.4]),
140   key          = "Group B",
141   fill_color   = red,
142   fill_density = 0.6,
143   line_width   = 4,
144   bars([1.2,4,0.4],[2.2,-2,0.4],[3.2,5,0.4]),
145   xaxis = true) $
148 ("Error bars")$
149 draw2d(
150   error_type        = xy,
151   points_joined     = true,
152   background_color  = orange,
153   color             = blue,
154   proportional_axes ='xy,
155   xrange            = [0, 18],
156   yrange            = [0,8],
157   grid              = true,
158   errors([[1,2,1,2], [3,5,2,1], [10,3,1,1], [17,6,1/2,2]])) $
161 ("Scaling and rotation in 2D")$
162 ( rect : rectangle([0,0],[3,1]),
163   th : 2*%pi/3,
164   draw2d(
165     proportional_axes = 'xy,
166     fill_color = red,
167     rect,
168     fill_color = blue,
169     transform = [x*2,-y,x,y],
170     rect,
171     fill_color = yellow,
172     transform = [cos(th)*x - sin(th)*y,
173                  sin(th)*x + cos(th)*y, x, y],
174     rect ))$
177 ("Scaling and reflection in 3D")$
178 ( my_grid : 
179     mesh([[1,1,3],[7,3,1],[12,-2,4],[15,0,5]],
180          [[2,7,8],[4,3,1],[10,5,8],[12,7,1]],
181          [[-2,11,10],[6,9,5],[6,15,1],[20,15,2]]),
182   draw3d(
183     my_grid,
184     color = red,
185     transform = [-2*x,-2*y,-2*z,x,y,z],
186     my_grid ) )$
189 ("Secondary y-scale")$
190 draw2d(
191   xtics_secondary = auto,
192   ytics_secondary = auto,
193   xaxis_secondary = true,
194   color = red,
195   key = "top x, left y",
196   explicit(sin(x),x,0,20),
197   xaxis_secondary = false,
198   yaxis_secondary = true,
199   color = blue,
200   key = "bottom x, right y",
201   explicit(100*sin(x+0.3)+2,x,0,10)) $
204 ("Regions defined by inequalities")$
205 draw2d(
206    x_voxel = 30,
207    y_voxel = 30,
208    fill_color = cyan,
209    region( not (x >1 or y > 2+x) and (sin(x+y) > 0) ,x,-20,5,y,-20,5)) $
212 ("Colored axes in 3D")$
213 draw3d(
214   explicit(x^2+y^2,x,-1,1,y,-1,1),
215   xaxis_width = 2,  xaxis_color = orange,  xaxis_type  = solid,  xaxis=true,
216   yaxis_width = 2,  yaxis_color = orange,  yaxis_type  = solid,  yaxis=true,
217   zaxis_width = 2,  zaxis_color = blue,    zaxis_type  = solid,  zaxis=true,
218   grid=true,
219   user_preamble= "set xyplane at 0" ) $
222 ("3D surface with mesh lines")$
223 draw3d(
224    enhanced3d = true,
225    wired_surface  = true,
226    explicit(x^2+y^2, x,-2,2,y,-2,2)) $
229 ("Enhanced 3D with logarithmic scale")$
230 draw3d(
231   title = "Logarithmic scale to colors",
232   enhanced3d = true,
233   color      = green,
234   logcb = true,
235   logz  = true,
236   palette = [-15,24,-9],
237   explicit(exp(x^2-y^2), x,-2,2,y,-2,2)) $
240 ("Colored 4th dimension")$
241 draw3d(
242   surface_hide = true,
243   enhanced3d   = sin(x*y),
244   explicit(20*exp(-x^2-y^2)-10, x ,-3, 3, y, -3, 3)) $
247 ("4th dimension in gray")$
248 draw3d(
249   surface_hide = true,
250   palette      = gray,
251   xu_grid      = 50,
252   yv_grid      = 50,
253   enhanced3d   = true,
254   explicit(5*sin(x*y), x, -5, 5, y, -5, 5),
255   enhanced3d   = 5 * sin(v*u),
256   explicit(u^2+v^2+10, u, -5, 5, v, -5, 5))$
259 ("Multiple objects in 3D")$
260 draw3d(
261   color = green,
262   explicit(exp(sin(x)+cos(x^2)),x,-3,3,y,-3,3),
263   color = blue,
264   parametric(cos(5*u)^2,sin(7*u),u-2,u,0,2),
265   color = brown,
266   line_width = 2,
267   parametric(t^2,sin(t),2+t,t,0,2),
268   surface_hide = true,
269   title = "Surface & curves",
270   color = red,
271   label(["UP",-2,0,3]),
272   label(["DOWN",2,0,-3]) )$
275 ("Parametric surface")$
276 draw3d(
277   palette    = [7,-15,3],
278   enhanced3d = (1-0.2*cos(v))*sin(u),
279   parametric_surface(
280     (1-0.2*cos(v))*cos(u),
281     (1-0.2*cos(v))*sin(u),
282     0.2*sin(v),
283     u, 0, 2*%pi, v, 0, 2*%pi)) $
286 ("Curve with colored 4th dimension")$
287 draw3d(
288   color      = blue,
289   nticks     = 60,
290   line_width = 3,
291   enhanced3d = (u-1)^2,
292   parametric(cos(5*u)^2,sin(7*u),u-2,u,0,2)) $
295 ("Sinusoidal tube with varying diameter")$
296 draw3d(
297   surface_hide = true,
298   enhanced3d   = true,
299   palette      = gray,
300   xu_grid      = 50,
301   tube(cos(a), a, 0, cos(a/10)^2, a, 0, 4*%pi) )$
304 ("Implicit 2D")$
305 draw2d(
306   grid      = true,
307   line_type = solid,
308   key       = "y^2=x^3-2*x+1",
309   implicit(y^2=x^3-2*x+1, x, -4,4, y, -4,4),
310   line_type = dots,
311   key       = "x^3+y^3 = 3*x*y^2-x-1",
312   implicit(x^3+y^3 = 3*x*y^2-x-1, x, -4,4, y, -4,4),
313   title     = "Two implicit functions" ) $
316 ("Implicit 3D")$
317 draw3d(
318   color = red,
319   implicit(x^2+y^2+z^2=1,x,-1.5,1.5,y,-1.5,1.5,z,-1.5,1.5),
320   color = green,
321   implicit(2*x^2+2*y^2=1,x,-1.5,1.5,y,-1.5,1.5,z,-1.5,1.5),
322   surface_hide = true)$
325 ("Colored elevation grid")$
326 (m: apply(
327       matrix,
328       makelist(makelist(random(1.0),k,1,5),i,1,5)),
329  draw3d(
330     enhanced3d    = true,
331     wired_surface = true,
332     elevation_grid(m,0,0,3,2)))$
335 ("Colored polygonal line")$
336 (m: makelist([k, k, random(10)],k,1,10),
337  draw3d(
338     enhanced3d    = [sin(j), j],
339     line_width    = 3,
340     point_type    = circle,
341     points_joined = true,
342     colorbox      = false,
343     points(m))) $
346 ("Colored cloud of points")$
347 (m: makelist([random(1.0),random(1.0),random(1.0)],k,1,2000),
348  draw3d(
349    point_type = filled_circle,
350    point_size = 2,
351    enhanced3d = [u+v-w,u,v,w], /* remember that variable names are arbitrary */
352    points(m)) )$
355 ("Colored implicit surface")$
356 draw3d(
357   enhanced3d = [x-y,x,y,z],
358   implicit((x^2+y^2+z^2-1)*(x^2+(y-1.5)^2+z^2-0.5)=0.015,
359            x,-1,1, y,-1.2,2.3, z,-1,1)) $
362 ("Polar coordinates")$
363 draw2d(
364   dimensions    = [400, 400],
365   file_name     = "polargrid",
366   nticks        = 200,
367   xrange        = [-5,5],
368   yrange        = [-5,5],
369   color         = red,
370   line_width    = 3,
371   title         = "Hyperbolic Spiral",
372   polar(10/theta,theta,1,10*%pi) )$
375 ("Spherical coordinates")$
376 draw3d(
377   surface_hide = true,
378   axis_3d      = false,
379   color        = salmon,
380   spherical(sin(z)*cos(2*a),a,0,2*%pi,z,0,%pi))$
383 ("Cylindrical coordinates")$
384 draw3d(
385   surface_hide = true,
386   axis_3d      = false,
387   xtics        = none,
388   ytics        = none,
389   ztics        = none,
390   color        = blue,
391   cylindrical(z,z,-2,2,a,0,2*%pi),
392   color        = brown,
393   cylindrical(3,z,-2,2,az,0,%pi),
394   color        = green,
395   cylindrical(sqrt(25-z^2),z,-5,5,a,0,%pi) )$
398 ("Contours")$
399 draw3d(
400   color = green,
401   explicit(20*exp(-x^2-y^2)-10,x,0,2,y,-3,3),
402   contour_levels = 15,
403   contour        = both,
404   surface_hide   = true) $
407 ("Contours in enhanced3d mode")$
408 draw3d(surface_hide =true,
409        color = green,
410        contour = both,
411        enhanced3d=true,
412        explicit(abs((x+y*%i)^3+1),x,-10,10,y,-10,10) ) $
415 ("Map contours")$
416 draw3d(
417   title    = "Projecting contours",
418   explicit(20*exp(-x^2-y^2)-10,x,0,2,y,-3,3),
419   contour_levels = 15,
420   contour        = map,
421   surface_hide   = true) $
424 ("2D sammple")$
425 draw2d(
426   key           = "Sample points",
427   point_type    = down_triangle,
428   point_size    = 3,
429   points(makelist([random(20),random(50)],k,1,10)),
430   point_type    = circle,
431   point_size    = 4,
432   points_joined = true,
433   color         = red,
434   key           = "puntazos",
435   points(makelist(k,k,1,20),makelist(random(30),k,1,20)) )$
438 ("Two samples in 3D")$
439 ( s2 : read_matrix (file_search ("wind.data")),
440   draw3d(
441     title      = "Daily average wind speeds. Two data sets",
442     point_size = 2,
443     color      = red,
444     key        = "Sample from stations 1, 2 and 3",
445     points(submatrix (s2, 4, 5)),
446     point_type = 4,
447     color      = green,
448     key        = "Sample from stations 1, 4 and 5",
449     points(submatrix (s2, 2, 3))) )$
452 ("Joined and disjoined points")$
453 ( xx: [1,2,3,4,5],
454   yy: [4,5,7,1,2],
455   zz: [3,2,1,9,4],
456   xyz: [[10,15,12],[11,13,16],[16,10,11],[15,15,15]],
457   draw3d(
458     point_size = 3,
459     point_type = filled_square,
460     color      = blue,
461     points(xx,yy,zz),
462     point_type = circle,
463     color      = green,
464     points_joined = true,
465     points(xyz)) )$
468 ("Impulses in 2D")$
469 draw2d(
470   points_joined = impulses,
471   line_width    = 2,
472   color         = "light-blue",
473   points(makelist(exp(-k/10),k,0,50)) )$
476 ("Impulses in 3D")$
477 draw3d(
478   points_joined = impulses,
479   line_width    = 2,
480   color         = "light-blue",
481   xyplane       = 0,
482   points(makelist([random(10.0),random(10.0),random(10.0)-5],k,0,25)) )$
485 ("2D shapes")$
486 draw2d(
487   fill_color = "sea-green",
488   color      = aquamarine,
489   line_width = 6,
490   polygon([[1,1],[3,0],[4,5],[0,3]]),
491   transparent = true,
492   line_type   = dots,
493   color       = light_yellow,
494   polygon([4,5,7],[6,4,2]),
495   line_type   = solid,
496   transparent = false,
497   fill_color  = violet,
498   rectangle([-2,-2],[8,-1]),
499   transparent = true,
500   color       = dark_goldenrod,
501   line_width  = 1,
502   rectangle([9,4],[2,-1.5]),
503   transparent = false,
504   fill_color  = grey80,
505   line_width  = 2,
506   ellipse(0,6,3,2,270,-270),
507   transparent = true,
508   color       = NaVy,
509   line_width  = 3,
510   ellipse(7,6,2,3,30,-90),
511   xrange      = [-3,10],
512   yrange      = [-3,9] )$
515 ("Vectors in 2d")$
516 draw2d(
517   xrange   = [-10,50],
518   yrange   = [-10,50],
519   color    = turquoise,
520   vector([1,1],[10,20]),
521   head_both   = true,
522   head_length = 5,
523   line_width  = 3,
524   color       = yellow,
525   head_angle  = 20,
526   vector([40,5],[-30,30]),
527   line_type = dots,
528   color     = "midnight-blue",
529   head_both = false,
530   vector([40,40],[-30,-40]))$
533 ("A vector field in 2D")$
534 ( /* vector origins are {(x,y)| x,y=1,...,10}  */
535   coord: setify(makelist(k,k,1,10)),
536   points2d: listify(cartesian_product(coord,coord)),
537   /* define the vector field */
538   vf2d(x,y):= vector([x,y],[sin(x),cos(y)]),
539   vect2: makelist(vf2d(k[1],k[2]),k,points2d),
540   draw2d([head_length=0.1, color=blue, unit_vectors=true], vect2))$
543 ("A vector field in 3D")$
544 ( coord: setify(makelist(k,k,1,5)),
545   points3d: listify(cartesian_product(coord,coord,coord)),
546   vf3d(x,y,z):= vector([x,y,z],[sin(x),cos(y),log(z)]),
547   vect3: makelist(vf3d(k[1],k[2],k[3]),k,points3d),
548   apply(draw3d,
549         append([head_length=0.1, color=blue],
550                vect3)) )$
553 ("Multiplot, one column")$
554 draw(
555   gr2d(
556     title  = "Ellipse",
557     nticks = 30,
558     parametric(2*cos(t),5*sin(t),t,0,2*%pi)),
559   gr2d(
560     title  = "Triangle",
561     color      = blue,
562     fill_color = red,
563     polygon([4,5,7],[6,4,2])))$
566 ("Multiplot, two columns")$
567 draw(
568   columns = 2,
569   gr2d(
570     title  = "Ellipse",
571     nticks = 30,
572     parametric(2*cos(t),5*sin(t),t,0,2*%pi)),
573   gr2d(
574     title  = "Triangle",
575     color      = blue,
576     fill_color = red,
577     polygon([4,5,7],[6,4,2])))$
580 ("Multiplots with arbitrary allocation")$
581 draw(
582   columns=2,
583   gr2d(explicit(sin(x), x, -1, 1)),
584   gr2d(allocation = [[0.1,0.25], [0.3,0.5]],
585        color = red,
586        explicit(x^2, x, -1, 1)),
587   gr2d(explicit(cos(x), x, -1, 1)),
588   gr2d(allocation = [[0.6,0.2], [0.3,0.3]],
589        color = black,
590        parametric(u*cos(u),u*sin(u), u, 0, 25)) )$
593 ("Playing with multiplots and background colors")$
594 draw( 
595     /* explicit surface in 3d */
596     gr3d(
597         background_color = yellow,
598         enhanced3d= x+y,
599         explicit(x^2+y^2, x, -1, 1, y, -1, 1) ),
600     /* explicit curve in 2d */
601     gr2d(
602         background_color = light_salmon,
603         allocation = [[0, 0],[1/3,1/3]],
604         explicit(x^2, x, -1, 1) ),
605    /* parametric curve in 3d */
606    gr3d(
607         background_color = cyan,
608         allocation = [[0.6, 0.2],[1/3,2/3]],
609         parametric(u,-u^2,cos(u), u, -1, 1) )  )$
612 ("Random images")$
613 ( im: apply('matrix, makelist(makelist(random(200),i,1,30),i,1,30)),
614   draw2d(
615     image(im,0,0,10,10),
616     image(im,10,10,15,15),
617     image(im,25,25,20,20)) )$
620 ("Matrix of 3D vectors interpreted as an image")$
621 ( rgb: apply('matrix,
622              makelist(
623                makelist(
624                  [random(300),random(300),random(300)],i,1,30),i,1,30)),
625   draw2d(image(rgb,0,0,30,30)) )$
628 ("European Union")$
629 ( load("worldmap"),
630   draw2d(
631     border=false,
632     fill_color=cyan,
633     rectangle([-28.80,27.53],[34.79,70.26]),
634     line_width = 3,
635     color      = dark_violet,
636     geomap(European_Union))  )$
639 ("Lists of options and objects are valid arguments")$
640 ( shadow_explicit(expr, var, vmin, vmax) :=
641      [line_width = 8,
642       color      = grey,
643       explicit(expr, var, vmin, vmax),
644       line_width = 1,
645       color      = blue,
646       color      = yellow,
647       explicit(expr, var, vmin, vmax) ],
648  draw2d(shadow_explicit(sin(x),x,0,10)) )$
651 ("Testing enhanced text in Postscript")$
652 draw2d(
653   file_name = "maxima_draw_demo_1",
654   title = "Made by Maxima during package draw demo",
655   filled_func = 0,
656   fill_color  = cyan,
657   explicit(x^2-x+5, x, 1, 4),
658   filled_func = false,
659   explicit(x^2-x+5, x, -1, 5),
660   label(["A = {/Symbol=30 \\362@_{/=9.6 1}^{/=12 4}} ({/Symbol a} x^2 + {/Symbol b} x +{/Symbol g}) d x",1,17]),
661   yrange      = [-1,30],
662   grid        = true,
663   terminal    = eps ) $
666 ("Testing animated gif")$
667 draw(
668   terminal   = animated_gif,
669   delay      = 40,
670   file_name  = "maxima_draw_demo_2",
671   dimensions  = [300, 300],
672   makelist(gr2d(explicit(x^(k/10),x,0,1)),k,1,10) )$
675 ("END OF DRAW DEMO") $