// Illustration des paramètres de plot
// gdf() = get("default_firure") -> valeurs par défaut d'une nouvelle figure.  Rarement utilisé
// gcf() -> retourne une structure sur l'actuelle fenêtre graphique. Utile.
// scf(n°)  ->  ouvre et/ou définit quelle est la fenêtre graphique par défaut.  Utile


funcprot(0); // pour ne pas indiquer une redéfinition des fonctions

// c.f. help GlobalProperty
ax = linspace(-1, 1, 21);
ay = ax.^3 - ax;
scf(0);
clf();
plot( ax, ay, 'LineStyle', 'none'..
      ,"Marker", 'o'..  // "o", "x", "*", ".", "d"=diamond, "s"=square
      ,"MarkSize", 8 ..
      ,"MarkerFaceColor", 'r'.. // "r", "g", "b, "c", "m", "k"=black, "w"=white
      ,"MarkBackground", "m"..  // fond de la marque, = MarkerFaceColor
      ,"MarkForeground", "k"..  // bord
      );
ay2 = ax - ax.^3;
plot( ax, ay2..
      ,"color", [0, 1, 1].. // couleurs [r, g, b]  entre  0 et 1  ou une lettre "r", "g", "b", etc.
      ,"Thickness", 4..    // épaisseur du trait
      ,"LineStyle", "--".. // "-" ligne pleine, "--" traitillé, ":" pointillé, "-.", "none"
      ,"Visible", "on"..   // si on veut cacher une ligne, mettre "off"
      ); 


// Illustration de la fonction gdf()
// gdf() = get("default_firure") -> valeurs par défaut d'une nouvelle figure
windef = gdf();
windef.figure_position = [500, 10];
windef.figure_size = [400,300];
windef.axes_size = [380,280];
windef.auto_resize = "on";
windef.viewport = [0,0];
windef.figure_name = "Figure n°%d";
windef.figure_id = 0;
windef.info_message = "";
//windef.color_map = écrire une matrice 32 x 3  de nombres entre 0 et 1.  tapez windef.color_map
windef.pixel_drawing_mode = "copy";
windef.anti_aliasing = "off";
windef.immediate_drawing = "on";
windef.background = -2;
windef.visible = "on";
windef.rotation_style = "unary";
windef.event_handler = "";
windef.event_handler_enable = "off";
windef.user_data = [];
windef.resizefcn = "";
windef.closerequestfcn = "";
windef.resize = "on";
windef.toolbar = "figure";
windef.toolbar_visible = "on";
windef.menubar = "figure";
windef.menubar_visible = "on";
windef.infobar_visible = "on";
windef.dockable = "on";
windef.layout = "none";
windef.layout_options = "OptNoLayout";
windef.default_axes = "on";
windef.icon = "";
windef.tag = "";

//=================================================================

// Illustration de la fonction  scf()  qui ouvre une fenêtre graphique.
// scf(n°);  Ouvre la fenêtre graphique n°,  en la créant si nécessaire.
win5 = scf(5); // la nouvelle fenêtre graphique sera en position [500, 10]
win5.color_map(31,:) = [1, 1, 0];  // = jaune
win5.background =  31; // référence à la table de couleur 'color_map'

axes5=win5.children;  // la courbe et les axes contenu dans la fenêtre graphique
win5.color_map(30,:) = [0.5, 1, 1];  // = cyan clair
axes5.background=30; // change la couleur de fond du graphique.
axes5.thickness=2; // épaisseur des axes
axes5.font_size=3;
axes5.font_style=4;
// 0=courrier gras,  1=courrier gras, 2=courrier,  3=italique
// 5=gras+italique,  4=gras,  6=normal,  7=gras italique  
// 8=très gras,  9=très gras + italique
// c.f. help font_style  et  help graphics fonts

axes5.zoom_box=[-0.1, -1.1, 7.1, 1.1]; // défini les échelles des axes

mprintf("nombre de courbes = %2d\n", length(axes5.children));

if (length(axes5.children) < 1) then
   x=0:0.1:7;
   plot(x, sin(x));  // à chaque plot, crée une nouvelle courbe !
   
  curvenew1=axes5.children(1);  // peut d'attributs
  line1=curvenew1.children(1);
  end;

if (length(axes5.children) < 2) then
  // change la courbe
  line1.data=[x; cos(x)]';  // attention au  '  à la fin

  x2=0:1:7;
  plot(x2, cos(x2));
  curvenew2=axes5.children(1);  // peut d'attributs
  line2=curvenew2.children(1);
  end;

// traite la première série de données
win5.color_map(2,:) = [1, 0, 0.5];  // = couleur de la courbe
line1.foreground = 2;
line1.thickness = 4; // épaisseur de la courbe
line1.line_style=1;
// 1 => trait plein  ;    2 => traitillé   ;  3 => traitillé plus court
// 4 =>  trait - point  ; 5 => trait - point - point
// 6 => trait long - trait court
// 7 => pointillé  ;  8 => pointillé moins dense ; 9 => autre pointillé

// traite la deuxième série de données
line2.line_mode="off";  // pas de ligne
line2.mark_mode="on";   // affiche les marques
line2.mark_size=15;
//win5.color_map(3,:) = [1, 1, 1];  // = couleur des marques
win5.color_map(3,:) = [0, 0, 0];  // = couleur des marques
line2.mark_foreground = 3;
win5.color_map(4,:) = [1, 1, 1];  // = couleur des fond des marques
line2.mark_background = 4;
line2.mark_style=9;
// 0 1 2 3 4   9  .. 14
// . 0 x + d   O

title( axes5, "C''est le titre", ..  // pour la suite des instructions à la ligne
       'fontsize', 5);
xlabel(axes5, "axe des x", 'fontsize', 4);
ylabel(axes5, "axe des y", 'fontsize', 4);
xstring(0, 0.05, "Un texte d''information");

//==============================================================0

// Différent types de lignes
win6 = scf(6);

axes6=win6.children;  // la courbe et les axes contenu dans la fenêtre graphique
axes6.zoom_box=[-0.1, -0.5, 7.1, 12.1]; // défini les échelles des axes

if (length(axes6.children) < 9) then
  win6.color_map(2,:) = [0, 0, 0];  // = couleur de la courbe
  x=0:0.1:7;
  
  for nn=1:11
    plot(x, 0.2*sin(x) + nn*ones(x) );  // à chaque plot, crée une nouvelle courbe !
   
    line61=axes6.children(1).children(1);
    line61.foreground = 2;
    line61.thickness = 4; // épaisseur de la courbe
    line61.line_style = nn;
    // 1 => trait plein  ;    2 => traitillé   ;  3 => traitillé plus court
    // 4 =>  trait - point  ; 5 => trait - point - point
    // 6 => trait long - trait court
    // 7 => pointillé  ;  8 => pointillé moins dense ; 9 => autre pointillé
    end; // for
  end;

//==============================================================0

// Différent types de marques
win7 = scf(7);

axes7=win7.children;  // la courbe et les axes contenu dans la fenêtre graphique
axes7.zoom_box=[-0.1, -0.5, 7.1, 12.1]; // défini les échelles des axes

if (length(axes7.children) < 9) then
  win7.color_map(3,:) = [0, 0, 0.5];  // = couleur des marques
  win7.color_map(4,:) = [1, 1, 0];  // = couleur des fond des marques
  x=0:1:7;
  
  for nn=0:11
    plot(x, 0.2*sin(x) + nn*ones(x) );  // à chaque plot, crée une nouvelle courbe !
   
    line71=axes7.children(1).children(1);
    
    line71.line_mode="off";  // pas de ligne
    line71.mark_mode="on";   // affiche les marques
    line71.mark_size=15;
    line71.mark_foreground = 3;
    line71.mark_background = 4;
    line71.mark_style = nn;
    // 0 1 2 3 4   9  .. 14
    // . 0 x + d   O
    end; // for
  end;


//==============================================================0

// Juste pour montrer comment accélérer l'affichage avec
// drawlater et drawnow
win8 = scf(8);

axes8=win8.children;  // la courbe et les axes contenu dans la fenêtre graphique
axes8.zoom_box=[-0.1, -0.5, 7.1, 12.1]; // défini les échelles des axes

if (length(axes8.children) < 9) then
  win8.color_map(3,:) = [0.8, 0, 0.5];  // = couleur des marques
  win8.color_map(4,:) = [1, 1, 0];  // = couleur des fond des marques
  x=0:1:7;
  drawlater;
  for nn=0:11
    plot(x, 0.2*sin(x) + nn*ones(x) );  // à chaque plot, crée une nouvelle courbe !
   
    line81=axes8.children(1).children(1);
    
    line81.line_mode="off";  // pas de ligne
    line81.mark_mode="on";   // affiche les marques
    line81.mark_size=15;
    line81.mark_foreground = 3;
    line81.mark_background = 4;
    line81.mark_style = nn;
    // 0 1 2 3 4   9  .. 14
    // . 0 x + d   O
    end; // for
  drawnow;
end;

//================================================================

win9 = scf(9); // la nouvelle fenêtre graphique sera en position [500, 10]
win9.figure_size = [640,500];

win9.color_map(30,:) = [1, 1, 0.8];  // = jaune clair
win9.color_map(31,:) = [1, 0.95, 1];  // = rose clair

if (length(win9.children.children) < 1) then
   x=0:0.1:7;
   subplot(2,2,1); 
   plot(x, sin(x));  // à chaque plot, crée une nouvelle courbe !
   axes91 = gca();  // == win9.children(1)
   axes91.background=30;
   axes91.thickness=2; // épaisseur des axes
   axes91.font_size=3;
   axes91.zoom_box=[-0.1, -1.1, 8.1, 1.1]; // défini les échelles des axes

   subplot(2,2,2); 
   plot(x, cos(x));  // à chaque plot, crée une nouvelle courbe !
   axes92 = gca();   // == win9.children(1)  ;  axes91 == win9.children(2)
   axes92.background=31;
   axes92.zoom_box=[-0.1, -1.2, 7.5, 1.2]; // défini les échelles des axes

   subplot(2,2,3); 
   plot(x, 0.6*sin(x));  // à chaque plot, crée une nouvelle courbe !
   axes93 = gca();   // == win9.children(1)  ;  axes91 == win9.children(3)
   axes93.background=31;
   axes93.zoom_box=[-0.1, -1.2, 7.5, 1.2]; // défini les échelles des axes

   subplot(2,2,4); 
   plot(x, 0.6*cos(x));  // à chaque plot, crée une nouvelle courbe !
   axes94 = gca();   // == win9.children(1)  ;  axes91 == win9.children(3)
   axes94.background=30;
   axes94.zoom_box=[-0.1, -1.2, 7.5, 1.2]; // défini les échelles des axes
   end;



function delall()
//===============
// Pour effacer tous les graphiques
www=winsid(); for ii=www; xdel(ii); end;
endfunction


//##############################################################

//axes5.parent: Figure
//axes5.children: "Compound"
 
//axes5.visible = "on"
//axes5.axes_visible = ["on","on","on"]
//axes5.axes_reverse = ["off","off","off"]
//axes5.grid = [-1,-1]
//axes5.grid_position = "background"
//axes5.grid_thickness = [1,1]
//axes5.grid_style = [3,3]
//axes5.x_location = "bottom"
//axes5.y_location = "left"
//axes5.title: "Label"
//axes5.x_label: "Label"
//axes5.y_label: "Label"
//axes5.z_label: "Label"
//axes5.auto_ticks = ["on","on","on"]
//axes5.x_ticks.locations = [0;1;2;3;4;5;6;7]
//axes5.y_ticks.locations = [-1;-0.5;0;0.5;1]
//axes5.z_ticks.locations = []
//axes5.x_ticks.labels = ["0";"1";"2";"3";"4";"5";"6";"7"]
//axes5.y_ticks.labels = ["-1";"-0.5";"0";"0.5";"1"]
//axes5.z_ticks.labels = []
//axes5.ticks_format = ["","",""]
//axes5.ticks_st = [1,1,1;0,0,0]
//axes5.box = "on"
//axes5.filled = "on"
//axes5.sub_ticks = [1,4]
//axes5.font_style = 6
//axes5.font_size = 1
//axes5.font_color = -1
//axes5.fractional_font = "off"
 
//axes5.isoview = "off"
//axes5.cube_scaling = "off"
//axes5.view = "2d"
//axes5.rotation_angles = [0,270]
//axes5.log_flags = "nnn"
//axes5.tight_limits = "off"
//axes5.data_bounds = [0,-0.9999233;7,0.9995736]
//axes5.zoom_box = []
//axes5.margins = [0.125,0.125,0.125,0.125]
//axes5.auto_margins = "on"
//axes5.axes_bounds = [0,0,1,1]
 
//axes5.auto_clear = "off"
//axes5.auto_scale = "on"
 
//axes5.hidden_axis_color = 4
//axes5.hiddencolor = 4
//axes5.line_mode = "on"
//axes5.line_style = 1
//axes5.thickness = 1
//axes5.mark_mode = "off"
//axes5.mark_style = 0
//axes5.mark_size_unit = "tabulated"
//axes5.mark_size = 0
//axes5.mark_foreground = -1
//axes5.mark_background = -2
//axes5.foreground = -1
//axes5.background = -2
//axes5.arc_drawing_method = "lines"
//axes5.clip_state = "clipgrf"
//axes5.clip_box = []
//axes5.user_data = []
//axes5.tag = 


//curvenew.parent: Axes
//curvenew.children: "Polyline"
//curvenew.visible = "on"
//curvenew.user_data = []
//curvenew.tag = 


//line1.parent: Compound
//line1.children: []
//line1.datatips: []
//line1.display_function: ""
//line1.display_function_data: []
//line1.visible = "on"
//line1.data = matrix 71x2  La matrice qui définit le tracé !
//line1.closed = "off"
//line1.line_mode = "on"
//line1.fill_mode = "off"
//line1.line_style = 1
//line1.thickness = 2
//line1.arrow_size_factor = 1
//line1.polyline_style = 1
//line1.foreground = 2
//line1.background = 30
//line1.interp_color_vector = []
//line1.interp_color_mode = "off"
//line1.mark_mode = "off"
//line1.mark_style = 0
//line1.mark_size_unit = "point"
//line1.mark_size = 0
//line1.mark_foreground = -1
//line1.mark_background = -2
//line1.mark_offset = 0
//line1.mark_stride = 1
//line1.x_shift = []
//line1.y_shift = []
//line1.z_shift = []
//line1.bar_width = 0
//line1.clip_state = "clipgrf"
//line1.clip_box = []
//line1.user_data = []
//line1.tag = 

