* Bug 7151 fixed: plot(x, list(fun,param)) was not supported 70/20470/5
Samuel GOUGEON [Thu, 23 Aug 2018 19:22:21 +0000 (21:22 +0200)]
  http://bugzilla.scilab.org/7151

  overhauled plot() page (en,PDF): http://bugzilla.scilab.org/attachment.cgi?id=4779

Change-Id: I5ce6ab361049a9a8b2a63d495cf1389c39411bbb

scilab/CHANGES.md
scilab/modules/graphics/help/en_US/2d_plot/plot.xml
scilab/modules/graphics/help/ja_JP/2d_plot/plot.xml
scilab/modules/graphics/help/pt_BR/2d_plot/plot.xml
scilab/modules/graphics/macros/plot.sci
scilab/modules/helptools/etc/images_md5.txt

index 2ad74a1..62f7f6a 100644 (file)
@@ -247,6 +247,7 @@ input and output arguments.
 * `save()` can now process lists with undefined components.
 * `surf(x,y,fun)` and `surf(x,y,list(fun,params))` syntaxes are now supported, with a function identifier `fun`.
 * Figure editor's terms have been clarify to ease usage.
+* `plot(x, list(fun, params))` is now supported.
 
 Help pages:
 -----------
@@ -259,7 +260,7 @@ Help pages:
   `uigetfont`, `uigetdir`, `uigetfile`, `uiputfile`, `cat`, `makecell`, `xstring`, `norm`, `barhomogenize`,
   `colordef`, `matrix`, `coffg`, `diag`, `speye`, `sparse`, `recursionlimit`, `for`, `fileinfo`, `end`,
   `iconvert`, `cond`, `Globalproperty`, `unique`, `intdec`, `plus`, `minus`, `varn`, `savematfile`,
-  `empty`, `modulo`, `pdiv`, `unix_g`, `unix_s`, `unix_w`, `unix_x`, `dos`, `listvarinfile`, `surf`, 
+  `empty`, `modulo`, `pdiv`, `unix_g`, `unix_s`, `unix_w`, `unix_x`, `dos`, `listvarinfile`, `surf`, `plot`
 * rewritten: `consolebox`, `double`, `isoview`, `pixel_drawing_mode`, `householder`, `or`, `|,||`,
  `and`, `&,&&`, `format`, `type`, `typeof`, `brackets`, `setlanguage`, `sleep`, `isinf`, `unique`,
  `bitor`, `bitxor`, `bitand`, `macr2tree`, `geomean`, `clf`, `getPreferencesValue`, `gcd`, `lcm`, `isglobal`,
@@ -415,6 +416,7 @@ Known issues
 * [#6939](http://bugzilla.scilab.org/show_bug.cgi?id=6939): `nearfloat("succ",rand(2,2,2))` returned a (2,2) matrix with no error.
 * [#6990](http://bugzilla.scilab.org/show_bug.cgi?id=6990): `or(hm,"r")`, `or(hm,"c")`, `and(hm,"r")` and `and(hm,"c")` generated an error for any hypermatrix hm of booleans, encoded integers, or doubles.
 * [#7107](http://bugzilla.scilab.org/show_bug.cgi?id=7107): The `graphics_entities` page missed listing the console_properties, root_properties, uicontrol_properties, and uimenu_properties. References to `getsystemmetrics` and to `setlookandfeel` were missing in the `See also` section.
+* [#7151](http://bugzilla.scilab.org/show_bug.cgi?id=7151): `plot(x, fun)` could not be used to plot a function with input parameters.
 * [#7215](http://bugzilla.scilab.org/show_bug.cgi?id=7215): Some Matlab-Scilab equivalences were missing/outdated (A,B,C chapters).
 * [#7221](http://bugzilla.scilab.org/show_bug.cgi?id=7221): `modulo` was not indicated as the equivalent of Matlab's rem().
 * [#7277](http://bugzilla.scilab.org/show_bug.cgi?id=7277): SciNotes `File>Open recent` menu was not updated after 5 items were added.
index 0d32f63..4391257 100644 (file)
             plot(y)
             plot(x, y)
             plot(x, fun)
+            plot(x, list(fun, param))
             plot(.., LineSpec)
             plot(.., LineSpec, GlobalProperty)
-            plot(x1,y1,LineSpec1, x2,y2,LineSpec2,...xN,yN,LineSpecN, GlobalProperty1, GlobalProperty2,..GlobalPropertyM)
+            plot(x1, y1, LineSpec1, x2,y2,LineSpec2,...xN, yN, LineSpecN, GlobalProperty1,.. GlobalPropertyM)
+            plot(x1,fun1,LineSpec1, x2,y2,LineSpec2,...xN,funN,LineSpecN, GlobalProperty1, ..GlobalPropertyM)
             plot(axes_handle,...)
         </synopsis>
     </refsynopsisdiv>
                 </listitem>
             </varlistentry>
             <varlistentry>
-                <term>fun</term>
+                <term>fun, fun1, ..</term>
                 <listitem>
                     <para>
-                        handle of a function, as in <literal>plot(x, sin)</literal>
+                        handle of a function, as in <literal>plot(x, sin)</literal>.
+                    </para>
+                    <para>
+                        If the function to plot needs some parameters as input arguments, the
+                        function and its parameters can be specified through a list, as in
+                        <literal>plot(x, list(delip, -0.4))</literal>
                     </para>
                 </listitem>
             </varlistentry>
         </para>
         <para>
             <warning>
-                When it is necessary and possible, <literal>plot</literal> transposes <literal>x</literal> and <literal>y</literal>,
+                When it is necessary and possible, <literal>plot</literal> transposes
+                <literal>x</literal> and <literal>y</literal>,
                 to get compatible dimensions; a warning is then issued. For instance,
                 when <literal>x</literal> has as many rows as <literal>y</literal> has columns.
                 If <literal>y</literal> is square, it is never transposed.
         </para>
         <informaltable border="1">
             <tr>
-                <td>
+                <th>
                     <literal>R</literal>
-                </td>
-                <td>
+                </th>
+                <th>
                     <literal>G</literal>
-                </td>
-                <td>
+                </th>
+                <th>
                     <literal>B</literal>
-                </td>
+                </th>
             </tr>
             <tr>
                 <td>0.</td>
     </refsection>
     <refsection>
         <title>Examples</title>
+        <para>
+            <emphasis role="bold">Simple plot of a single curve:</emphasis>
+        </para>
         <programlisting role="example"><![CDATA[
-// x initialisation
-x=[0:0.1:2*%pi]';
-//simple plot
-plot(sin(x))
- ]]></programlisting>
-        <scilab:image>
-            x=[0:0.1:2*%pi]';
-            plot(sin(x))
-        </scilab:image>
-        <programlisting role="example"><![CDATA[
-clf()
-x=[0:0.1:2*%pi]';
-plot(x,sin(x))
+// Default abscissae = indices
+subplot(1,2,1)
+plot(sin(0:0.1:2*%pi))
+xlabel("x indices")
+
+// With explicit abscissae:
+x = [0:0.1:2*%pi]';
+subplot(1,2,2)
+plot(x, sin(x))
+xlabel("Specified abscissae")
  ]]></programlisting>
         <scilab:image>
-            x=[0:0.1:2*%pi]';
-            plot(x,sin(x))
+            // Default abscissae = indices
+            subplot(1,2,1)
+            plot(sin(0:0.1:2*%pi))
+            xlabel("x indices")
+
+            // With explicit abscissae:
+            x = [0:0.1:2*%pi]';
+            subplot(1,2,2)
+            plot(x, sin(x))
+            xlabel("Specified abscissae")
+
+            gcf().axes_size = [700 350];
         </scilab:image>
+        <para/>
+        <para>
+            <emphasis role="bold">Multiple curves with shared abscissae:</emphasis>
+            Y: 1 column = 1 curve:
+        </para>
         <programlisting role="example"><![CDATA[
 clf()
-//multiple plot
-x=[0:0.1:2*%pi]';
-plot(x,[sin(x) sin(2*x) sin(3*x)])
+x = [0:0.1:2*%pi]';
+plot(x, [sin(x) sin(2*x) sin(3*x)])
  ]]></programlisting>
         <scilab:image>
             x=[0:0.1:2*%pi]';
             plot(x,[sin(x) sin(2*x) sin(3*x)])
-        </scilab:image>
-        <programlisting role="example"><![CDATA[
-clf()
-x=[0:0.1:2*%pi]';
-// axis on the right
-plot(x,sin(x))
-a=gca(); // Handle on current axes entity
-a.y_location ="right";
-clf()
- ]]></programlisting>
-        <scilab:image>
-            x=[0:0.1:2*%pi]';
-            plot(x,sin(x))
-            a=gca();
-            a.y_location ="right";
-        </scilab:image>
-        <programlisting role="example"><![CDATA[
-x=[0:0.1:2*%pi]';
-// axis centered at (0,0)
-plot(x-4,sin(x),x+2,cos(x))
-a=gca(); // Handle on axes entity
-a.x_location = "origin";
-a.y_location = "origin";
 
-// Some operations on entities created by plot ...
-isoview on
-a.children // list the children of the axes : here it is an Compound child composed of 2 entities
-poly1= a.children.children(2); //store polyline handle into poly1
-poly1.foreground = 4; // another way to change the style...
-poly1.thickness = 3;  // ...and the thickness of a curve.
-poly1.clip_state='off' // clipping control
-isoview off
- ]]></programlisting>
-        <scilab:image>
-            x=[0:0.1:2*%pi]';
-            plot(x-4,sin(x),x+2,cos(x))
-            isoview()
-            a=gca();
-            a.x_location = "origin";
-            a.y_location = "origin";
-            a.children
-            poly1= a.children.children(2);
-            poly1.foreground = 4;
-            poly1.thickness = 3;
-            poly1.clip_state='off'
-            isoview("off");
+            gcf().axes_size = [700 350];
         </scilab:image>
+        <para/>
+        <para>
+            <emphasis role="bold">
+                Specifying a macro or a builtin instead of explicit ordinates:
+            </emphasis>
+        </para>
         <programlisting role="example"><![CDATA[
+clf
+subplot(2,2,1)         // sin() is a builtin
+plot(1:0.1:10, sin)    // <=> plot(1:0.1:10, sin(1:0.1:10))
+title("plot(x, sin)", "fontsize",3)
 
-//LineSpec and GlobalProperty examples:
-clf();
-t=0:%pi/20:2*%pi;
-plot(t,sin(t),'ro-.',t,cos(t),'cya+',t,abs(sin(t)),'--mo')
-scf(2)
-plot([t ;t],[sin(t) ;cos(t)],'xdat',[1:2])
-scf(3)
-axfig3 = gca();
-scf(4) // should remain blank
-plot(axfig3,[t ;t],[sin(t) ;cos(t)],'zdat',[1:2],'marker','d','markerfac','green','markeredg','yel')
-xdel(winsid())
- ]]></programlisting>
-        <scilab:image>
-            t=0:%pi/20:2*%pi;
-            plot(t,sin(t),'ro-.',t,cos(t),'cya+',t,abs(sin(t)),'--mo')
-            scf(2)
-            plot([t ;t],[sin(t) ;cos(t)],'xdat',[1:2])
-            scf(3)
-            axfig3 = gca();
-            scf(4) // should remain blank
-            plot(axfig3,[t ;t],[sin(t) ;cos(t)],'zdat',[1:2],'marker','d','markerfac','green','markeredg','yel')
-        </scilab:image>
-        <programlisting role="example"><![CDATA[
-//Data specification
-t=-%pi:0.1:%pi;
-size(t)
-plot(t) // simply plots y versus t vector size
- ]]></programlisting>
-        <scilab:image>
-            t=-%pi:0.1:%pi;
-            size(t)
-            plot(t)
-        </scilab:image>
-        <programlisting role="example"><![CDATA[
-clf(); // clear figure
-t=-%pi:0.1:%pi;
-plot(t,sin(t)); // plots sin(t) versus t
+// with a macro:
+deff('y = myFun(x)','y = x + rand(x)')
+subplot(2,2,2)
+plot(-3:0.1:5, myFun)
+title("plot(x, myFun)", "fontsize",3)
 
- ]]></programlisting>
-        <scilab:image>
-            t=-%pi:0.1:%pi;
-            plot(t,sin(t));
-        </scilab:image>
-        <programlisting role="example"><![CDATA[
-clf();
-t=[1     1     1     1
-   2     3     4     5
-   3     4     5     6
-   4     5     6     7];
+// With functions with parameters:
+subplot(2,2,3)
+plot(1:0.05:7, list(delip, -0.4))  // <=> plot(1:0.05:7, delip(1:0.05:7,-0.4) )
+title("plot(x, list(delip,-0.4))", "fontsize",3)
 
-plot(t) // plots each t column versus row size
+function Y = myPow(x,p)
+    [X,P] = ndgrid(x,p);
+    Y = X.^P;
+    m = max(abs(Y),"r");
+    for i = 1:size(Y,2)
+        Y(:,i) = Y(:,i)/m(i);
+    end
+endfunction
+x = -5:0.1:6;
+subplot(2,2,4)
+plot(x, list(myPow,1:5))
+title("plot(x, list(myPow,1:5))", "fontsize",3)
  ]]></programlisting>
-        <scilab:image>
-            t=[1     1     1     1
-            2     3     4     5
-            3     4     5     6
-            4     5     6     7];
+        <scilab:image><![CDATA[
+            subplot(2,2,1)         // sin() is a builtin
+            plot(1:0.1:10, sin)    // <=> plot(1:0.1:10, sin(1:0.1:10))
+            title("plot(x,sin)", "fontsize",3)
 
-            plot(t) // plots each t column versus row size
-        </scilab:image>
+            // with a macro:
+            deff('y = myFun(x)','y = x + rand(x)')
+            subplot(2,2,2)
+            plot(-3:0.1:5, myFun)
+            title("plot(x, myFun)", "fontsize",3)
+
+            // With functions with parameters:
+            subplot(2,2,3)
+            plot(1:0.05:7, list(delip, -0.4))  // <=> plot(1:0.05:7, delip(1:0.05:7,-0.4) )
+            title("plot(x, list(delip,-0.4))", "fontsize",3)
+
+            function Y = myPow(x,p)
+                [X,P] = ndgrid(x,p);
+                Y = X.^P;
+                m = max(abs(Y),"r");
+                for i = 1:size(Y,2)
+                    Y(:,i) = Y(:,i)/m(i);
+                end
+            endfunction
+            x = -5:0.1:6;
+            subplot(2,2,4)
+            plot(x, list(myPow,1:5))
+            title("plot(x, list(myPow,1:5))", "fontsize",3)
+
+            gcf().axes_size = [730 500];
+        ]]></scilab:image>
+        <para/>
+        <para>
+            <emphasis role="bold">Setting curves simple styles when calling plot():</emphasis>
+        </para>
         <programlisting role="example"><![CDATA[
-clf();
-t=[1     1     1     1
-   2     3     4     5
-   3     4     5     6
-   4     5     6     7];
-
-subplot(221)
-plot(t,sin(t)); // plots sin(t) versus t column by column this time
-xtitle("sin(t) versus t")
-subplot(222)
-plot(t,sin(t)')
-xtitle("sin(t)'' versus t")
-subplot(223)
-plot(t',sin(t))
-a=gca();
-a.data_bounds=[0 -1;7 1]; // to see the vertical line hidden by the y axis
-xtitle("sin(t) versus t''")
-subplot(224)
-plot(t',sin(t)')
-xtitle("sin(t)'' versus t''")
+clf
+t = -%pi:%pi/20:2*%pi;
+// sin() : in Red, with O marks, without line
+// cos() : in Green, with + marks, with a solid line
+// gaussian: in Blue, without marks, with dotted line
+gauss = 1.5*exp(-(t/2-1).^2)-1;
 
+plot(t,sin,'ro', t,cos,'g+-', t,gauss,':b')
  ]]></programlisting>
-        <scilab:image>
-            t=[1     1     1     1
-            2     3     4     5
-            3     4     5     6
-            4     5     6     7];
-
-            subplot(221)
-            plot(t,sin(t)); // plots sin(t) versus t column by column this time
-            xtitle("sin(t) versus t")
-            subplot(222)
-            plot(t,sin(t)')
-            xtitle("sin(t)'' versus t")
-            subplot(223)
-            plot(t',sin(t))
-            a=gca();
-            a.data_bounds=[0 -1;7 1]; // to see the vertical line hidden by the y axis
-            xtitle("sin(t) versus t''")
-            subplot(224)
-            plot(t',sin(t)')
-            xtitle("sin(t)'' versus t''")
+        <scilab:image><![CDATA[
+            t = -%pi:%pi/20:2*%pi;
+            // sin() : in Red, with O marks, without line
+            // cos() : in Green, with + marks, with a solid line
+            // gaussian: in Blue, without marks, with dotted line
+            gauss = 1.5*exp(-(t/2-1).^2)-1;
+
+            plot(t,sin,'ro', t,cos,'g+-', t,gauss,':b')
+
+            gcf().axes_size = [800 400];
+        ]]>
         </scilab:image>
+        <para/>
+        <para>
+        Vertical segments between two curves, with automatic colors, and using Global properties
+        for markers styles. Targeting a defined axes.
+        </para>
         <programlisting role="example"><![CDATA[
+clf
+subplot(1,3,3)
+ax3 = gca();         // We will draw here later
+xsetech([0 0 0.7 1]) // Defines the first Axes area
+t = -3:%pi/20:7;
+// Tuning markers properties
+plot([t ;t],[sin(t) ;cos(t)],'marker','d','markerFaceColor','green','markerEdgeColor','yel')
 
-clf();
-t=[1     1     1     1
-   2     3     4     5
-   3     4     5     6
-   4     5     6     7];
-
-//Special case 1
-//x : vector ([5 6 7 8]) and y : matrix (t)
-x=[5 6 7 8]
-plot(x,t);
-plot(x',t); // idem, x is automatically transposed to match t (here the columns)
+// Targeting a defined axes
+plot(ax3, t, sin)
  ]]></programlisting>
-        <scilab:image>
-            t=[1     1     1     1
-            2     3     4     5
-            3     4     5     6
-            4     5     6     7];
+        <scilab:image><![CDATA[
+            clf
+            subplot(1,3,3)
+            ax3 = gca();         // We will draw here later
+            xsetech([0 0 0.7 1]) // Defines the first Axes area
+            t = -3:%pi/20:7;
+            // Tuning markers properties
+            plot([t ;t],[sin(t) ;cos(t)],'marker','d','markerFaceColor','green','markerEdgeColor','yel')
 
-            x=[5 6 7 8];
-            plot(x',t);
+            // Targeting a defined axes
+            plot(ax3, t, sin)
+
+            gcf().axes_size = [800 400];
+        ]]>
         </scilab:image>
+        <para/>
+        <para/>
+        <para>
+            <emphasis role="bold">Case of a non-square Y matrix:</emphasis>
+            When it is consistent and required, X or/and Y data are
+            automatically transposed in order to become plottable.
+        </para>
         <programlisting role="example"><![CDATA[
 clf()
-x=[5 6 7 8]
-
-t=[1     1     1     1
-   2     3     4     5
-   3     4     5     6
-   4     5     6     7];
+x = [5 6 7 8]
+y = [1   1   1   1   8
+     2   3   4   5   9
+     3   4   5   6  10
+     4   5   6   7  12];
 
 // Only one matching possibility case: how to make 4 identical plots in 4 manners...
 // x is 1x4 (vector) and y is 4x5 (non square matrix)
-subplot(221);
-plot(x,[t [8;9;10;12]]');
-subplot(222);
-plot(x',[t [8;9;10;12]]);
-subplot(223);
-plot(x,[t [8;9;10;12]]');
-subplot(224);
-plot(x',[t [8;9;10;12]]');
+subplot(221); plot(x', y , "o-");    // OK as is
+subplot(222); plot(x , y , "o-");    // x is transposed
+subplot(223); plot(x', y', "o-");    // y is transposed
+subplot(224); plot(x , y', "o-");    // x and y are transposed
  ]]></programlisting>
         <scilab:image>
-            x=[5 6 7 8]
-
-            t=[1     1     1     1
-            2     3     4     5
-            3     4     5     6
-            4     5     6     7];
+            x = [5 6 7 8]
+            y = [1   1   1   1   8
+                 2   3   4   5   9
+                 3   4   5   6  10
+                 4   5   6   7  12];
 
-            // Only one matching possibility case : how to make 4 identical plots in 4 manners...
+            // Only one matching possibility case: how to make 4 identical plots in 4 manners...
             // x is 1x4 (vector) and y is 4x5 (non square matrix)
-            subplot(221);
-            plot(x',[t [8;9;10;12]]);
-            subplot(222);
-            plot(x',[t [8;9;10;12]]);
-            subplot(223);
-            plot(x',[t [8;9;10;12]]);
-            subplot(224);
-            plot(x',[t [8;9;10;12]]);
+            subplot(221); plot(x', y , "o-");    // OK as is
+            subplot(222); plot(x , y , "o-");    // x is transposed
+            subplot(223); plot(x', y', "o-");    // y is transposed
+            subplot(224); plot(x , y', "o-");    // x and y are transposed
         </scilab:image>
+        <para>
+            <emphasis role="bold">Case of a square Y matrix, and X implicit or square:</emphasis>
+        </para>
         <programlisting role="example"><![CDATA[
-clf()
+clf
+t = [1   1   1   1
+     2   3   4   5
+     3   4   5   6
+     4   5   6   7];
 
-t=[1     1     1     1
-   2     3     4     5
-   3     4     5     6
-   4     5     6     7];
+subplot(231), plot(t,"o-") , title("plot(t)",  "fontsize",3)
+subplot(234), plot(t',"o-"), title("plot(t'')", "fontsize",3)
 
-//Special case 2
-// Case where only x or y is a square matrix
-//x : matrix (t) and y  : vector ([1 2 3 4])
-plot(t,[1 2 3 4]') // equivalent to plot(t,[1 1 1 1;2 2 2 2;3 3 3 3;4 4 4 4])
-plot(t,[1;2;3;4]') // the same plot, but here Y needs to be transposed
- ]]></programlisting>
-        <scilab:image>
-            t=[1     1     1     1
-            2     3     4     5
-            3     4     5     6
-            4     5     6     7];
-
-            //Special case 2
-            // Case where only x or y is a square matrix
-            //x : matrix (t) and y  : vector ([1 2 3 4])
-            plot(t,[1 2 3 4]') // equivalent to plot(t,[1 1 1 1;2 2 2 2;3 3 3 3;4 4 4 4])
-        </scilab:image>
-        <programlisting role="example"><![CDATA[
-t=[1     1     1     1
-   2     3     4     5
-   3     4     5     6
-   4     5     6     7];
-clf();
-cols = 1:4;
-
-// cols is transposed : notice the priority given to the columns treatment
-plot(t', cols) // equivalent to plot(t',[1 1 1 1;2 2 2 2;3 3 3 3;4 4 4 4])
-plot(t', cols') // the same plot
+subplot(232), plot(t,t,"o-") , title("plot(t, t)",  "fontsize",3)
+subplot(233), plot(t,t',"o-"), title("plot(t,t'')", "fontsize",3)
+
+subplot(235), plot(t', t,"o-"),  title("plot(t'', t)",   "fontsize",3)
+subplot(236), plot(t', t',"o-"), title("plot(t'', t'')", "fontsize",3)
+
+for i=1:6, gcf().children(i).data_bounds([1 3]) = 0.5; end
  ]]></programlisting>
         <scilab:image>
-            t=[1     1     1     1
-            2     3     4     5
-            3     4     5     6
-            4     5     6     7];
-            clf();
-            cols = 1:4;
-
-            // cols is transposed : notice the priority given to the columns treatment
-            plot(t',cols') // the same plot
+            clf
+            t = [1   1   1   1
+                 2   3   4   5
+                 3   4   5   6
+                 4   5   6   7];
+
+            subplot(231), plot(t,"o-") , title("plot(t)",  "fontsize",3)
+            subplot(234), plot(t',"o-"), title("plot(t'')", "fontsize",3)
+
+            subplot(232), plot(t,t,"o-") , title("plot(t, t)",  "fontsize",3)
+            subplot(233), plot(t,t',"o-"), title("plot(t,t'')", "fontsize",3)
+
+            subplot(235), plot(t', t,"o-"),  title("plot(t'', t)",   "fontsize",3)
+            subplot(236), plot(t', t',"o-"), title("plot(t'', t'')", "fontsize",3)
+
+            for i=1:6, gcf().children(i).data_bounds([1 3]) = 0.5; end
+
+            gcf().axes_size = [800 450];
         </scilab:image>
+        <para/>
+        <para>
+            <emphasis role="bold">Special cases of a matrix X and a vector Y:</emphasis>
+        </para>
         <programlisting role="example"><![CDATA[
-clf();
-// y is a function defined by..
-// ..a primitive
-plot(1:0.1:10,sin) // equivalent to plot(1:0.1:10,sin(1:0.1:10))
+clf
+X = [1   1   1   1
+     2   3   4   5
+     3   4   5   6
+     4   5   6   7];
+y = [1 2 3 4];
+
+subplot(221), plot(X, y,  "o-"), title("plot(X, row)",  "fontsize",3)
+        // equivalent to plot(t, [1 1 1 1; 2 2 2 2; 3 3 3 3; 4 4 4 4])
+subplot(223), plot(X, y', "o-"), title("plot(X, col)  (row = col'')",  "fontsize",3)
+subplot(222), plot(X',y,  "o-"), title("plot(X'', row)",  "fontsize",3)
+subplot(224), plot(X',y', "o-"), title("plot(X'', col)  (row = col'')",  "fontsize",3)
 
+for i = 1:4, gcf().children(i).data_bounds([1 3]) = 0.5; end
  ]]></programlisting>
         <scilab:image>
-            plot(1:0.1:10,sin)
+            clf
+            X = [1   1   1   1
+                 2   3   4   5
+                 3   4   5   6
+                 4   5   6   7];
+            y = [1 2 3 4];
+
+            subplot(221), plot(X, y,  "o-"), title("plot(X, row)",  "fontsize",3)
+                    // equivalent to plot(t, [1 1 1 1; 2 2 2 2; 3 3 3 3; 4 4 4 4])
+            subplot(223), plot(X, y', "o-"), title("plot(X, col)  (row = col'')",  "fontsize",3)
+            subplot(222), plot(X',y,  "o-"), title("plot(X'', row)",  "fontsize",3)
+            subplot(224), plot(X',y', "o-"), title("plot(X'', col)  (row = col'')",  "fontsize",3)
+
+            for i = 1:4, gcf().children(i).data_bounds([1 3]) = 0.5; end
         </scilab:image>
+        <para/>
+        <para/>
+        <para>
+            <emphasis role="bold">Post-tuning Axes and curves:</emphasis>
+        </para>
         <programlisting role="example"><![CDATA[
-clf();
-// ..a macro:
-deff('[y]=toto(x)','y=x.*x')
-plot(1:10,toto)
+x=[0:0.1:2*%pi]';
+plot(x-4,sin(x), x+2,cos(x))
+
+// axis centered at (0,0)
+a=gca(); // Handle on axes entity
+a.x_location = "origin";
+a.y_location = "origin";
+
+// Some operations on entities created by plot ...
+isoview on
+a.children // list the children of the axes : here it is an Compound child composed of 2 entities
+poly1= a.children.children(2); //store polyline handle into poly1
+poly1.foreground = 4;  // another way to change the style...
+poly1.thickness = 3;   // ...and the thickness of a curve.
+poly1.clip_state='off' // clipping control
+isoview off
  ]]></programlisting>
         <scilab:image>
-            deff('[y]=toto(x)','y=x.*x')
-            plot(1:10,toto)
+            x = [0:0.1:2*%pi]';
+            plot(x-4,sin(x),x+2,cos(x))
+            a = gca();
+            a.x_location = "origin";
+            a.y_location = "origin";
+            isoview on
+            a.children
+            poly1 = a.children.children(2);
+            poly1.foreground = 4;
+            poly1.thickness = 3;
+            poly1.clip_state='off'
+            isoview off
         </scilab:image>
     </refsection>
     <refsection role="see also">
@@ -605,6 +622,18 @@ plot(1:10,toto)
                 <link linkend="plot2d">plot2d</link>
             </member>
             <member>
+                <link linkend="plot2d2">plot2d2</link>
+            </member>
+            <member>
+                <link linkend="plot2d3">plot2d3</link>
+            </member>
+            <member>
+                <link linkend="plot2d4">plot2d4</link>
+            </member>
+            <member>
+                <link linkend="param3d">param3d</link>
+            </member>
+            <member>
                 <link linkend="surf">surf</link>
             </member>
             <member>
@@ -641,6 +670,13 @@ plot(1:10,toto)
                     their "#RRGGBB" hexadecimal codes, or by their indices in the colormap.
                 </revdescription>
             </revision>
+            <revision>
+                <revnumber>6.0.2</revnumber>
+                <revdescription>
+                    Plotting a function fun(x, params) with input parameters is now possible with
+                    plot(x, list(fun, params)).
+                </revdescription>
+            </revision>
         </revhistory>
     </refsection>
 </refentry>
index baa7b8b..ce4a14b 100644 (file)
@@ -2,9 +2,8 @@
 <!--
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) INRIA - Fabrice Leray
- * Copyright (C) 2018 - Samuel GOUGEON
- *
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
+ * Copyright (C) 2018 - Samuel GOUGEON
  *
  * This file is hereby licensed under the terms of the GNU GPL v2.0,
  * pursuant to article 5.3.4 of the CeCILL v.2.1.
             plot(y)
             plot(x, y)
             plot(x, fun)
+            plot(x, list(fun, param))
             plot(.., LineSpec)
             plot(.., LineSpec, GlobalProperty)
-            plot(x1,y1,LineSpec1, x2,y2,LineSpec2,...xN,yN,LineSpecN, GlobalProperty1, GlobalProperty2,..GlobalPropertyM)
+            plot(x1, y1, LineSpec1, x2,y2,LineSpec2,...xN, yN, LineSpecN, GlobalProperty1,.. GlobalPropertyM)
+            plot(x1,fun1,LineSpec1, x2,y2,LineSpec2,...xN,funN,LineSpecN, GlobalProperty1, ..GlobalPropertyM)
             plot(axes_handle,...)
         </synopsis>
     </refsynopsisdiv>
                 </listitem>
             </varlistentry>
             <varlistentry>
-                <term>fun</term>
+                <term>fun, fun1, ..</term>
                 <listitem>
                     <para>
-                        handle of a function, as in <literal>plot(x, sin)</literal>
+                        handle of a function, as in <literal>plot(x, sin)</literal>.
+                    </para>
+                    <para>
+                        If the function to plot needs some parameters as input arguments, the
+                        function and its parameters can be specified through a list, as in
+                        <literal>plot(x, list(delip, -0.4))</literal>
                     </para>
                 </listitem>
             </varlistentry>
@@ -83,7 +89,7 @@
                     <para>このオプションの引数は,
                         グローバルオブジェクトのプロパティを定義する
                         一連の命令<literal>{PropertyName,PropertyValue}</literal>
-                        を表し,     このプロットで作成された全ての曲線に適用されます.
+                        を表し,    このプロットで作成された全ての曲線に適用されます.
                         利用可能なプロパティの全て参照するには
                         <link linkend="GlobalProperty">GlobalProperty</link>を参照してください.
                     </para>
     </refsection>
     <refsection role="examples">
         <title>例</title>
+        <para>
+            <emphasis role="bold">Simple plot of a single curve:</emphasis>
+        </para>
         <programlisting role="example"><![CDATA[
-// x 初期化
-x=[0:0.1:2*%pi]';
-//simple plot
-plot(sin(x))
+// Default abscissae = indices
+subplot(1,2,1)
+plot(sin(0:0.1:2*%pi))
+xlabel("x indices")
+
+// With explicit abscissae:
+x = [0:0.1:2*%pi]';
+subplot(1,2,2)
+plot(x, sin(x))
+xlabel("Specified abscissae")
  ]]></programlisting>
         <scilab:image>
-            x=[0:0.1:2*%pi]';
-            plot(sin(x))
+            // Default abscissae = indices
+            subplot(1,2,1)
+            plot(sin(0:0.1:2*%pi))
+            xlabel("x indices")
+
+            // With explicit abscissae:
+            x = [0:0.1:2*%pi]';
+            subplot(1,2,2)
+            plot(x, sin(x))
+            xlabel("Specified abscissae")
+
+            gcf().axes_size = [700 350];
         </scilab:image>
+        <para/>
+        <para>
+            <emphasis role="bold">Multiple curves with shared abscissae:</emphasis>
+            Y: 1 column = 1 curve:
+        </para>
         <programlisting role="example"><![CDATA[
 clf()
-x=[0:0.1:2*%pi]';
-plot(x,sin(x))
+x = [0:0.1:2*%pi]';
+plot(x, [sin(x) sin(2*x) sin(3*x)])
  ]]></programlisting>
         <scilab:image>
             x=[0:0.1:2*%pi]';
-            plot(x,sin(x))
+            plot(x,[sin(x) sin(2*x) sin(3*x)])
+
+            gcf().axes_size = [700 350];
         </scilab:image>
+        <para/>
+        <para>
+            <emphasis role="bold">
+                Specifying a macro or a builtin instead of explicit ordinates:
+            </emphasis>
+        </para>
         <programlisting role="example"><![CDATA[
-//複数プロット
-x=[0:0.1:2*%pi]';
-plot(x,[sin(x) sin(2*x) sin(3*x)])
+clf
+subplot(2,2,1)         // sin() is a builtin
+plot(1:0.1:10, sin)    // <=> plot(1:0.1:10, sin(1:0.1:10))
+title("plot(x, sin)", "fontsize",3)
+
+// with a macro:
+deff('y = myFun(x)','y = x + rand(x)')
+subplot(2,2,2)
+plot(-3:0.1:5, myFun)
+title("plot(x, myFun)", "fontsize",3)
+
+// With functions with parameters:
+subplot(2,2,3)
+plot(1:0.05:7, list(delip, -0.4))  // <=> plot(1:0.05:7, delip(1:0.05:7,-0.4) )
+title("plot(x, list(delip,-0.4))", "fontsize",3)
+
+function Y = myPow(x,p)
+    [X,P] = ndgrid(x,p);
+    Y = X.^P;
+    m = max(abs(Y),"r");
+    for i = 1:size(Y,2)
+        Y(:,i) = Y(:,i)/m(i);
+    end
+endfunction
+x = -5:0.1:6;
+subplot(2,2,4)
+plot(x, list(myPow,1:5))
+title("plot(x, list(myPow,1:5))", "fontsize",3)
  ]]></programlisting>
-        <scilab:image>
-            x=[0:0.1:2*%pi]';
-            plot(x,[sin(x) sin(2*x) sin(3*x)])
+        <scilab:image><![CDATA[
+            subplot(2,2,1)         // sin() is a builtin
+            plot(1:0.1:10, sin)    // <=> plot(1:0.1:10, sin(1:0.1:10))
+            title("plot(x,sin)", "fontsize",3)
+
+            // with a macro:
+            deff('y = myFun(x)','y = x + rand(x)')
+            subplot(2,2,2)
+            plot(-3:0.1:5, myFun)
+            title("plot(x, myFun)", "fontsize",3)
+
+            // With functions with parameters:
+            subplot(2,2,3)
+            plot(1:0.05:7, list(delip, -0.4))  // <=> plot(1:0.05:7, delip(1:0.05:7,-0.4) )
+            title("plot(x, list(delip,-0.4))", "fontsize",3)
+
+            function Y = myPow(x,p)
+                [X,P] = ndgrid(x,p);
+                Y = X.^P;
+                m = max(abs(Y),"r");
+                for i = 1:size(Y,2)
+                    Y(:,i) = Y(:,i)/m(i);
+                end
+            endfunction
+            x = -5:0.1:6;
+            subplot(2,2,4)
+            plot(x, list(myPow,1:5))
+            title("plot(x, list(myPow,1:5))", "fontsize",3)
+
+            gcf().axes_size = [730 500];
+        ]]></scilab:image>
+        <para/>
+        <para>
+            <emphasis role="bold">Setting curves simple styles when calling plot():</emphasis>
+        </para>
+        <programlisting role="example"><![CDATA[
+clf
+t = -%pi:%pi/20:2*%pi;
+// sin() : in Red, with O marks, without line
+// cos() : in Green, with + marks, with a solid line
+// gaussian: in Blue, without marks, with dotted line
+gauss = 1.5*exp(-(t/2-1).^2)-1;
+
+plot(t,sin,'ro', t,cos,'g+-', t,gauss,':b')
+ ]]></programlisting>
+        <scilab:image><![CDATA[
+            t = -%pi:%pi/20:2*%pi;
+            // sin() : in Red, with O marks, without line
+            // cos() : in Green, with + marks, with a solid line
+            // gaussian: in Blue, without marks, with dotted line
+            gauss = 1.5*exp(-(t/2-1).^2)-1;
+
+            plot(t,sin,'ro', t,cos,'g+-', t,gauss,':b')
+
+            gcf().axes_size = [800 400];
+        ]]>
+        </scilab:image>
+        <para/>
+        <para>
+        Vertical segments between two curves, with automatic colors, and using Global properties
+        for markers styles. Targeting a defined axes.
+        </para>
+        <programlisting role="example"><![CDATA[
+clf
+subplot(1,3,3)
+ax3 = gca();         // We will draw here later
+xsetech([0 0 0.7 1]) // Defines the first Axes area
+t = -3:%pi/20:7;
+// Tuning markers properties
+plot([t ;t],[sin(t) ;cos(t)],'marker','d','markerFaceColor','green','markerEdgeColor','yel')
+
+// Targeting a defined axes
+plot(ax3, t, sin)
+ ]]></programlisting>
+        <scilab:image><![CDATA[
+            clf
+            subplot(1,3,3)
+            ax3 = gca();         // We will draw here later
+            xsetech([0 0 0.7 1]) // Defines the first Axes area
+            t = -3:%pi/20:7;
+            // Tuning markers properties
+            plot([t ;t],[sin(t) ;cos(t)],'marker','d','markerFaceColor','green','markerEdgeColor','yel')
+
+            // Targeting a defined axes
+            plot(ax3, t, sin)
+
+            gcf().axes_size = [800 400];
+        ]]>
         </scilab:image>
+        <para/>
+        <para/>
+        <para>
+            <emphasis role="bold">Case of a non-square Y matrix:</emphasis>
+            When it is consistent and required, X or/and Y data are
+            automatically transposed in order to become plottable.
+        </para>
         <programlisting role="example"><![CDATA[
 clf()
-x=[0:0.1:2*%pi]';
-// 右に軸
-plot(x,sin(x))
-a=gca(); // カレントの軸エンティティのハンドル
-a.y_location ="right";
+x = [5 6 7 8]
+y = [1   1   1   1   8
+     2   3   4   5   9
+     3   4   5   6  10
+     4   5   6   7  12];
+
+// Only one matching possibility case: how to make 4 identical plots in 4 manners...
+// x is 1x4 (vector) and y is 4x5 (non square matrix)
+subplot(221); plot(x', y , "o-");    // OK as is
+subplot(222); plot(x , y , "o-");    // x is transposed
+subplot(223); plot(x', y', "o-");    // y is transposed
+subplot(224); plot(x , y', "o-");    // x and y are transposed
  ]]></programlisting>
         <scilab:image>
-            x=[0:0.1:2*%pi]';
-            plot(x,sin(x))
-            a=gca();
-            a.y_location ="right";
+            x = [5 6 7 8]
+            y = [1   1   1   1   8
+                 2   3   4   5   9
+                 3   4   5   6  10
+                 4   5   6   7  12];
+
+            // Only one matching possibility case: how to make 4 identical plots in 4 manners...
+            // x is 1x4 (vector) and y is 4x5 (non square matrix)
+            subplot(221); plot(x', y , "o-");    // OK as is
+            subplot(222); plot(x , y , "o-");    // x is transposed
+            subplot(223); plot(x', y', "o-");    // y is transposed
+            subplot(224); plot(x , y', "o-");    // x and y are transposed
+        </scilab:image>
+        <para>
+            <emphasis role="bold">Case of a square Y matrix, and X implicit or square:</emphasis>
+        </para>
+        <programlisting role="example"><![CDATA[
+clf
+t = [1   1   1   1
+     2   3   4   5
+     3   4   5   6
+     4   5   6   7];
+
+subplot(231), plot(t,"o-") , title("plot(t)",  "fontsize",3)
+subplot(234), plot(t',"o-"), title("plot(t'')", "fontsize",3)
+
+subplot(232), plot(t,t,"o-") , title("plot(t, t)",  "fontsize",3)
+subplot(233), plot(t,t',"o-"), title("plot(t,t'')", "fontsize",3)
+
+subplot(235), plot(t', t,"o-"),  title("plot(t'', t)",   "fontsize",3)
+subplot(236), plot(t', t',"o-"), title("plot(t'', t'')", "fontsize",3)
+
+for i=1:6, gcf().children(i).data_bounds([1 3]) = 0.5; end
+ ]]></programlisting>
+        <scilab:image>
+            clf
+            t = [1   1   1   1
+                 2   3   4   5
+                 3   4   5   6
+                 4   5   6   7];
+
+            subplot(231), plot(t,"o-") , title("plot(t)",  "fontsize",3)
+            subplot(234), plot(t',"o-"), title("plot(t'')", "fontsize",3)
+
+            subplot(232), plot(t,t,"o-") , title("plot(t, t)",  "fontsize",3)
+            subplot(233), plot(t,t',"o-"), title("plot(t,t'')", "fontsize",3)
+
+            subplot(235), plot(t', t,"o-"),  title("plot(t'', t)",   "fontsize",3)
+            subplot(236), plot(t', t',"o-"), title("plot(t'', t'')", "fontsize",3)
+
+            for i=1:6, gcf().children(i).data_bounds([1 3]) = 0.5; end
+
+            gcf().axes_size = [800 450];
         </scilab:image>
+        <para/>
+        <para>
+            <emphasis role="bold">Special cases of a matrix X and a vector Y:</emphasis>
+        </para>
+        <programlisting role="example"><![CDATA[
+clf
+X = [1   1   1   1
+     2   3   4   5
+     3   4   5   6
+     4   5   6   7];
+y = [1 2 3 4];
+
+subplot(221), plot(X, y,  "o-"), title("plot(X, row)",  "fontsize",3)
+        // equivalent to plot(t, [1 1 1 1; 2 2 2 2; 3 3 3 3; 4 4 4 4])
+subplot(223), plot(X, y', "o-"), title("plot(X, col)  (row = col'')",  "fontsize",3)
+subplot(222), plot(X',y,  "o-"), title("plot(X'', row)",  "fontsize",3)
+subplot(224), plot(X',y', "o-"), title("plot(X'', col)  (row = col'')",  "fontsize",3)
+
+for i = 1:4, gcf().children(i).data_bounds([1 3]) = 0.5; end
+ ]]></programlisting>
+        <scilab:image>
+            clf
+            X = [1   1   1   1
+                 2   3   4   5
+                 3   4   5   6
+                 4   5   6   7];
+            y = [1 2 3 4];
+
+            subplot(221), plot(X, y,  "o-"), title("plot(X, row)",  "fontsize",3)
+                    // equivalent to plot(t, [1 1 1 1; 2 2 2 2; 3 3 3 3; 4 4 4 4])
+            subplot(223), plot(X, y', "o-"), title("plot(X, col)  (row = col'')",  "fontsize",3)
+            subplot(222), plot(X',y,  "o-"), title("plot(X'', row)",  "fontsize",3)
+            subplot(224), plot(X',y', "o-"), title("plot(X'', col)  (row = col'')",  "fontsize",3)
+
+            for i = 1:4, gcf().children(i).data_bounds([1 3]) = 0.5; end
+        </scilab:image>
+        <para/>
+        <para/>
+        <para>
+            <emphasis role="bold">Post-tuning Axes and curves:</emphasis>
+        </para>
         <programlisting role="example"><![CDATA[
 x=[0:0.1:2*%pi]';
-// (0,0)を中心とする軸
 plot(x-4,sin(x),x+2,cos(x))
+
+// (0,0)を中心とする軸
 a=gca(); // 軸エンティティのハンドル
 a.x_location = "origin";
 a.y_location = "origin";
+isoview on
+
 // plotにより作成されたエンティティに複数の処理を行う
-isoview
 a.children // 軸の子のリスト : ここでは,2個のエンティティの複合子オブジェクト
 poly1= a.children.children(2); //線分群のハンドルをpoly1 に保存
 poly1.foreground = 4; // スタイルを変更する別の方法...
@@ -372,228 +626,18 @@ poly1.clip_state='off' // 制御をクリップ
 isoview off
  ]]></programlisting>
         <scilab:image>
-            x=[0:0.1:2*%pi]';
+            x = [0:0.1:2*%pi]';
             plot(x-4,sin(x),x+2,cos(x))
-            isoview()
-            a=gca();
+            a = gca();
             a.x_location = "origin";
             a.y_location = "origin";
+            isoview on
             a.children
-            poly1= a.children.children(2);
+            poly1 = a.children.children(2);
             poly1.foreground = 4;
             poly1.thickness = 3;
             poly1.clip_state='off'
-            isoview("off");
-        </scilab:image>
-        <programlisting role="example"><![CDATA[
-//LineSpec と GlobalProperty の例:
-clf();
-t=0:%pi/20:2*%pi;
-plot(t,sin(t),'ro-.',t,cos(t),'cya+',t,abs(sin(t)),'--mo')
-scf(2)
-plot([t ;t],[sin(t) ;cos(t)],'xdat',[1:2])
-scf(3)
-axfig3 = gca();
-scf(4) // 空白のままにする
-plot(axfig3,[t ;t],[sin(t) ;cos(t)],'zdat',[1:2],'marker','d','markerfac','green','markeredg','yel')
-xdel(winsid())
- ]]></programlisting>
-        <scilab:image>
-            t=0:%pi/20:2*%pi;
-            plot(t,sin(t),'ro-.',t,cos(t),'cya+',t,abs(sin(t)),'--mo')
-            scf(2)
-            plot([t ;t],[sin(t) ;cos(t)],'xdat',[1:2])
-            scf(3)
-            axfig3 = gca();
-            scf(4) // should remain blank
-            plot(axfig3,[t ;t],[sin(t) ;cos(t)],'zdat',[1:2],'marker','d','markerfac','green','markeredg','yel')
-        </scilab:image>
-        <programlisting role="example"><![CDATA[
-//データ指定
-t=-%pi:0.1:%pi;
-size(t)
-plot(t) // ベクトルtの大きさに対してyをプロット
- ]]></programlisting>
-        <scilab:image>
-            t=-%pi:0.1:%pi;
-            size(t)
-            plot(t)
-        </scilab:image>
-        <programlisting role="example"><![CDATA[
-t=-%pi:0.1:%pi;
-plot(t,sin(t)); // tに対してsin(t)をプロット
- ]]></programlisting>
-        <scilab:image>
-            t=-%pi:0.1:%pi;
-            plot(t,sin(t));
-        </scilab:image>
-        <programlisting role="example"><![CDATA[
-t=[1     1     1     1
-   2     3     4     5
-   3     4     5     6
-   4     5     6     7];
-plot(t) // 行の大きさに対してtの各列をプロット
- ]]></programlisting>
-        <scilab:image>
-            t=[1     1     1     1
-            2     3     4     5
-            3     4     5     6
-            4     5     6     7];
-            plot(t) // plots each t column versus row size
-        </scilab:image>
-        <programlisting role="example"><![CDATA[
-t=[1     1     1     1
-   2     3     4     5
-   3     4     5     6
-   4     5     6     7];
-subplot(221)
-plot(t,sin(t)); // 列毎にtに対してsin(t)をプロット
-xtitle("sin(t) versus t")
-subplot(222)
-plot(t,sin(t)')
-xtitle("sin(t)'' versus t")
-subplot(223)
-plot(t',sin(t))
-a=gca();
-a.data_bounds=[0 -1;7 1]; // y軸に隠された垂直線を表示
-xtitle("sin(t) versus t''")
-subplot(224)
-plot(t',sin(t)')
-xtitle("sin(t)'' versus t''")
- ]]></programlisting>
-        <scilab:image>
-            t=[1     1     1     1
-            2     3     4     5
-            3     4     5     6
-            4     5     6     7];
-            subplot(221)
-            plot(t,sin(t)); // plots sin(t) versus t column by column this time
-            xtitle("sin(t) versus t")
-            subplot(222)
-            plot(t,sin(t)')
-            xtitle("sin(t)'' versus t")
-            subplot(223)
-            plot(t',sin(t))
-            a=gca();
-            a.data_bounds=[0 -1;7 1]; // to see the vertical line hidden by the y axis
-            xtitle("sin(t) versus t''")
-            subplot(224)
-            plot(t',sin(t)')
-            xtitle("sin(t)'' versus t''")
-        </scilab:image>
-        <programlisting role="example"><![CDATA[
-t=[1     1     1     1
-   2     3     4     5
-   3     4     5     6
-   4     5     6     7];
-//特別な場合1
-//x : vector ([5 6 7 8]) and y : matrix (t)
-x=[5 6 7 8]
-plot(x,t);
-plot(x',t); // idem, x はtに一致するように自動的に転置される (ここでは列)
- ]]></programlisting>
-        <scilab:image>
-            t=[1     1     1     1
-            2     3     4     5
-            3     4     5     6
-            4     5     6     7];
-            x=[5 6 7 8];
-            plot(x',t);
-        </scilab:image>
-        <programlisting role="example"><![CDATA[
-clf()
-x=[5 6 7 8]
-t=[1     1     1     1
-   2     3     4     5
-   3     4     5     6
-   4     5     6     7];
-// Only one matching possibility case : how to make 4 identical plots in 4 manners...
-// x is 1x4 (vector) and y is 4x5 (non square matrix)
-subplot(221);
-plot(x,[t [8;9;10;12]]');
-subplot(222);
-plot(x',[t [8;9;10;12]]);
-subplot(223);
-plot(x,[t [8;9;10;12]]');
-subplot(224);
-plot(x',[t [8;9;10;12]]');
-clf()
- ]]></programlisting>
-        <scilab:image>
-            x=[5 6 7 8]
-            t=[1     1     1     1
-            2     3     4     5
-            3     4     5     6
-            4     5     6     7];
-            // Only one matching possibility case : how to make 4 identical plots in 4 manners...
-            // x is 1x4 (vector) and y is 4x5 (non square matrix)
-            subplot(221);
-            plot(x',[t [8;9;10;12]]);
-            subplot(222);
-            plot(x',[t [8;9;10;12]]);
-            subplot(223);
-            plot(x',[t [8;9;10;12]]);
-            subplot(224);
-            plot(x',[t [8;9;10;12]]);
-        </scilab:image>
-        <programlisting role="example"><![CDATA[
-t=[1     1     1     1
-   2     3     4     5
-   3     4     5     6
-   4     5     6     7];
-//特別な場合2
-// xまたはyのみが疎行列の場合
-//x : matrix (t) と y  : vector ([1 2 3 4])
-plot(t,[1 2 3 4]) // plot(t,[1 1 1 1;2 2 2 2;3 3 3 3;4 4 4 4])と同じ
-plot(t,[1;2;3;4]) // 同じプロット
-clf();
- ]]></programlisting>
-        <scilab:image>
-            t=[1     1     1     1
-            2     3     4     5
-            3     4     5     6
-            4     5     6     7];
-            //Special case 2
-            // Case where only x or y is a square matrix
-            //x : matrix (t) and y  : vector ([1 2 3 4])
-            plot(t,[1 2 3 4]') // equivalent to plot(t,[1 1 1 1;2 2 2 2;3 3 3 3;4 4 4 4])
-        </scilab:image>
-        <programlisting role="example"><![CDATA[
-t=[1     1     1     1
-   2     3     4     5
-   3     4     5     6
-   4     5     6     7];
-clf();
-cols = 1:4;
-// cols is transposed : notice the priority given to the columns treatment
-plot(t', cols) // equivalent to plot(t',[1 1 1 1;2 2 2 2;3 3 3 3;4 4 4 4])
-plot(t', cols') // the same plot
- ]]></programlisting>
-        <scilab:image>
-            t=[1     1     1     1
-            2     3     4     5
-            3     4     5     6
-            4     5     6     7];
-            clf();
-            cols = 1:4;
-            // cols is transposed : notice the priority given to the columns treatment
-            plot(t',cols') // the same plot
-        </scilab:image>
-        <programlisting role="example"><![CDATA[
-// y はプリミティブで定義された関数
-plot(1:0.1:10,sin) // plot(1:0.1:10,sin(1:0.1:10))と同じ
- ]]></programlisting>
-        <scilab:image>
-            plot(1:0.1:10,sin)
-        </scilab:image>
-        <programlisting role="example"><![CDATA[
-// ..マクロ:
-deff('[y]=toto(x)','y=x.*x')
-plot(1:10,toto)
- ]]></programlisting>
-        <scilab:image>
-            deff('[y]=toto(x)','y=x.*x')
-            plot(1:10,toto)
+            isoview off
         </scilab:image>
     </refsection>
     <refsection role="see also">
@@ -603,6 +647,18 @@ plot(1:10,toto)
                 <link linkend="plot2d">plot2d</link>
             </member>
             <member>
+                <link linkend="plot2d2">plot2d2</link>
+            </member>
+            <member>
+                <link linkend="plot2d3">plot2d3</link>
+            </member>
+            <member>
+                <link linkend="plot2d4">plot2d4</link>
+            </member>
+            <member>
+                <link linkend="param3d">param3d</link>
+            </member>
+            <member>
                 <link linkend="surf">surf</link>
             </member>
             <member>
@@ -639,6 +695,13 @@ plot(1:10,toto)
                     their "#RRGGBB" hexadecimal codes, or by their indices in the colormap.
                 </revdescription>
             </revision>
+            <revision>
+                <revnumber>6.0.2</revnumber>
+                <revdescription>
+                    Plotting a function fun(x, params) with input parameters is now possible with
+                    plot(x, list(fun, params)).
+                </revdescription>
+            </revision>
         </revhistory>
     </refsection>
 </refentry>
index 24b6db1..ce527a8 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) INRIA - Fabrice Leray
             plot(y)
             plot(x, y)
             plot(x, fun)
+            plot(x, list(fun, param))
             plot(.., LineSpec)
             plot(.., LineSpec, GlobalProperty)
-            plot(x1,y1,LineSpec1, x2,y2,LineSpec2,...xN,yN,LineSpecN, GlobalProperty1, GlobalProperty2,..GlobalPropertyM)
+            plot(x1, y1, LineSpec1, x2,y2,LineSpec2,...xN, yN, LineSpecN, GlobalProperty1,.. GlobalPropertyM)
+            plot(x1,fun1,LineSpec1, x2,y2,LineSpec2,...xN,funN,LineSpecN, GlobalProperty1, ..GlobalPropertyM)
             plot(axes_handle,...)
         </synopsis>
     </refsynopsisdiv>
                 </listitem>
             </varlistentry>
             <varlistentry>
-                <term>fun</term>
+                <term>fun, fun1</term>
                 <listitem>
                     <para>
                         função definida como um macro ou uma primitiva, como em
                         <literal>plot(x, sin)</literal>
                     </para>
+                    <para>
+                        If the function to plot needs some parameters as input arguments, the
+                        function and its parameters can be specified through a list, as in
+                        <literal>plot(x, list(delip, -0.4))</literal>
+                    </para>
                 </listitem>
             </varlistentry>
             <varlistentry>
     </refsection>
     <refsection role="examples">
         <title>Exemplos</title>
+        <para>
+            <emphasis role="bold">Simple plot of a single curve:</emphasis>
+        </para>
         <programlisting role="example"><![CDATA[
-// inicialização de x
-x=[0:0.1:2*%pi]';
-//esboço simples
-plot(sin(x))
-clf()
-plot(x,sin(x))
-//esboços múltiplos
-clf()
-plot(x,[sin(x) sin(2*x) sin(3*x)])
-clf()
+// Default abscissae = indices
+subplot(1,2,1)
+plot(sin(0:0.1:2*%pi))
+xlabel("x indices")
 
-// eixo à direita
-plot(x,sin(x))
-a=gca(); // manipulador da entidade Axes
-a.y_location ="right";
-clf()
+// With explicit abscissae:
+x = [0:0.1:2*%pi]';
+subplot(1,2,2)
+plot(x, sin(x))
+xlabel("Specified abscissae")
+ ]]></programlisting>
+        <scilab:image>
+            // Default abscissae = indices
+            subplot(1,2,1)
+            plot(sin(0:0.1:2*%pi))
+            xlabel("x indices")
 
-// eixo centrado em (0,0)
-plot(x-4,sin(x),x+2,cos(x))
-a=gca(); // manipulador da entidade Axes
-a.x_location = "middle";
-a.y_location = "middle";
-
-// algumas operações em entidades criadas por plot...
-isoview
-a=gca();
-a.children // listando os galhos da entidade Axes: aqui, é um galho Compound composto por duas entidades
-poly1= a.children.children(2); //armazenando um manipulador Polyline em poly1
-poly1.foreground = 4; // outro modo de se mudar o estilo...
-poly1.thickness = 3;  // ...e a espessura de uma curva.
-poly1.clip_state='off' // controle de recorte
-isoview off
+            // With explicit abscissae:
+            x = [0:0.1:2*%pi]';
+            subplot(1,2,2)
+            plot(x, sin(x))
+            xlabel("Specified abscissae")
 
-//exemplos com LineSpec e GlobalProperty:
-clf();
-t=0:%pi/20:2*%pi;
-plot(t,sin(t),'ro-.',t,cos(t),'cya+',t,abs(sin(t)),'--mo')
-scf(2)
-plot([t ;t],[sin(t) ;cos(t)],'xdat',[1:2])
-scf(3)
-axfig3 = gca();
-scf(4) // deveria permanecer em branco
-plot(axfig3,[t ;t],[sin(t) ;cos(t)],'zdat',[1:2],'marker','d','markerfac','green','markeredg','yel')
-xdel(winsid())
-
-//especificação de dados
-t=-%pi:0.1:%pi;
-size(t)
-plot(t) // esboços simples de y versus tamanho do vetor t
-clf(); // limpando figura
-
-plot(t,sin(t)); // esboça sin(t) versus t
-clf();
-
-t=[1     1     1     1
-   2     3     4     5
-   3     4     5     6
-   4     5     6     7];
-
-plot(t) // esboça cada coluna t column versus tamanho de linha
-clf();
-
-subplot(221)
-plot(t,sin(t)); // esboça sin(t) versus t coluna por coluna desta vez
-xtitle("sin(t) versus t")
-subplot(222)
-plot(t,sin(t)')
-xtitle("sin(t)'' versus t")
-subplot(223)
-plot(t',sin(t))
-a=gca();
-a.data_bounds=[0 -1;7 1]; // para ver a linha vertical escondida pelo eixo y
-xtitle("sin(t) versus t''")
-subplot(224)
-plot(t',sin(t)')
-xtitle("sin(t)'' versus t''")
-
-clf();
-
-//caso especial 1
-//x : vector ([5 6 7 8]) and y : matrix (t)
-x=[5 6 7 8]
-plot(x,t);
-plot(x',t); // idem, x é automaiticamente transposto para corresponder a t (aqui as colunas)
+            gcf().axes_size = [700 350];
+        </scilab:image>
+        <para>
+            <emphasis role="bold">Multiple curves with shared abscissae:</emphasis>
+            Y: 1 column = 1 curve:
+        </para>
+        <programlisting role="example"><![CDATA[
 clf()
+x = [0:0.1:2*%pi]';
+plot(x, [sin(x) sin(2*x) sin(3*x)])
+ ]]></programlisting>
+        <scilab:image>
+            x=[0:0.1:2*%pi]';
+            plot(x,[sin(x) sin(2*x) sin(3*x)])
 
-// apenas um caso de possibilidade de correspondência: como realizar quatro esboços idênticos 4 de quatro maneiras 4...
-// x é um vetor 1x4 (vector) y is uma matriz não-quadrada 4x5
-subplot(221);
-plot(x,[t [8;9;10;12]]');
-subplot(222);
-plot(x',[t [8;9;10;12]]');
-subplot(223);
-plot(x,[t [8;9;10;12]]');
-subplot(224);
-plot(x',[t [8;9;10;12]]');
+            gcf().axes_size = [700 350];
+        </scilab:image>
+        <para>
+            <emphasis role="bold">
+                Specifying a macro or a builtin instead of explicit ordinates:
+            </emphasis>
+        </para>
+        <programlisting role="example"><![CDATA[
+clf
+subplot(2,2,1)         // sin() is a builtin
+plot(1:0.1:10, sin)    // <=> plot(1:0.1:10, sin(1:0.1:10))
+title("plot(x, sin)", "fontsize",3)
+
+// with a macro:
+deff('y = myFun(x)','y = x + rand(x)')
+subplot(2,2,2)
+plot(-3:0.1:5, myFun)
+title("plot(x, myFun)", "fontsize",3)
+
+// With functions with parameters:
+subplot(2,2,3)
+plot(1:0.05:7, list(delip, -0.4))  // <=> plot(1:0.05:7, delip(1:0.05:7,-0.4) )
+title("plot(x, list(delip,-0.4))", "fontsize",3)
+
+function Y = myPow(x,p)
+    [X,P] = ndgrid(x,p);
+    Y = X.^P;
+    m = max(abs(Y),"r");
+    for i = 1:size(Y,2)
+        Y(:,i) = Y(:,i)/m(i);
+    end
+endfunction
+x = -5:0.1:6;
+subplot(2,2,4)
+plot(x, list(myPow,1:5))
+title("plot(x, list(myPow,1:5))", "fontsize",3)
+ ]]></programlisting>
+        <scilab:image><![CDATA[
+            subplot(2,2,1)         // sin() is a builtin
+            plot(1:0.1:10, sin)    // <=> plot(1:0.1:10, sin(1:0.1:10))
+            title("plot(x,sin)", "fontsize",3)
+
+            // with a macro:
+            deff('y = myFun(x)','y = x + rand(x)')
+            subplot(2,2,2)
+            plot(-3:0.1:5, myFun)
+            title("plot(x, myFun)", "fontsize",3)
+
+            // With functions with parameters:
+            subplot(2,2,3)
+            plot(1:0.05:7, list(delip, -0.4))  // <=> plot(1:0.05:7, delip(1:0.05:7,-0.4) )
+            title("plot(x, list(delip,-0.4))", "fontsize",3)
+
+            function Y = myPow(x,p)
+                [X,P] = ndgrid(x,p);
+                Y = X.^P;
+                m = max(abs(Y),"r");
+                for i = 1:size(Y,2)
+                    Y(:,i) = Y(:,i)/m(i);
+                end
+            endfunction
+            x = -5:0.1:6;
+            subplot(2,2,4)
+            plot(x, list(myPow,1:5))
+            title("plot(x, list(myPow,1:5))", "fontsize",3)
+
+            gcf().axes_size = [730 500];
+        ]]></scilab:image>
+        <para>
+        <emphasis role="bold">Setting curves simple styles when calling plot():</emphasis>
+        </para>
+        <programlisting role="example"><![CDATA[
+clf
+t = -%pi:%pi/20:2*%pi;
+// sin() : in Red, with O marks, without line
+// cos() : in Green, with + marks, with a solid line
+// gaussian: in Blue, without marks, with dotted line
+gauss = 1.5*exp(-(t/2-1).^2)-1;
+
+plot(t,sin,'ro', t,cos,'g+-', t,gauss,':b')
+ ]]></programlisting>
+        <scilab:image><![CDATA[
+            t = -%pi:%pi/20:2*%pi;
+            // sin() : in Red, with O marks, without line
+            // cos() : in Green, with + marks, with a solid line
+            // gaussian: in Blue, without marks, with dotted line
+            gauss = 1.5*exp(-(t/2-1).^2)-1;
+
+            plot(t,sin,'ro', t,cos,'g+-', t,gauss,':b')
+
+            gcf().axes_size = [800 400];
+        ]]>
+        </scilab:image>
+        <para>
+        Vertical segments between two curves, with automatic colors, and using Global properties
+        for markers styles. Targeting a defined axes.
+        </para>
+        <programlisting role="example"><![CDATA[
+clf
+subplot(1,3,3)
+ax3 = gca();         // We will draw here later
+xsetech([0 0 0.7 1]) // Defines the first Axes area
+t = -3:%pi/20:7;
+// Tuning markers properties
+plot([t ;t],[sin(t) ;cos(t)],'marker','d','markerFaceColor','green','markerEdgeColor','yel')
+
+// Targeting a defined axes
+plot(ax3, t, sin)
+ ]]></programlisting>
+        <scilab:image><![CDATA[
+            clf
+            subplot(1,3,3)
+            ax3 = gca();         // We will draw here later
+            xsetech([0 0 0.7 1]) // Defines the first Axes area
+            t = -3:%pi/20:7;
+            // Tuning markers properties
+            plot([t ;t],[sin(t) ;cos(t)],'marker','d','markerFaceColor','green','markerEdgeColor','yel')
+
+            // Targeting a defined axes
+            plot(ax3, t, sin)
+
+            gcf().axes_size = [800 400];
+        ]]>
+        </scilab:image>
+        <para/>
+        <para/>
+        <para>
+            <emphasis role="bold">Case of a non-square Y matrix:</emphasis>
+            When it is consistent and required, X or/and Y data are
+            automatically transposed in order to become plottable.
+        </para>
+        <programlisting role="example"><![CDATA[
 clf()
+x = [5 6 7 8]
+y = [1   1   1   1   8
+     2   3   4   5   9
+     3   4   5   6  10
+     4   5   6   7  12];
+
+// Only one matching possibility case: how to make 4 identical plots in 4 manners...
+// x is 1x4 (vector) and y is 4x5 (non square matrix)
+subplot(221); plot(x', y , "o-");    // OK as is
+subplot(222); plot(x , y , "o-");    // x is transposed
+subplot(223); plot(x', y', "o-");    // y is transposed
+subplot(224); plot(x , y', "o-");    // x and y are transposed
+ ]]></programlisting>
+        <scilab:image>
+            x = [5 6 7 8]
+            y = [1   1   1   1   8
+                 2   3   4   5   9
+                 3   4   5   6  10
+                 4   5   6   7  12];
+
+            // Only one matching possibility case: how to make 4 identical plots in 4 manners...
+            // x is 1x4 (vector) and y is 4x5 (non square matrix)
+            subplot(221); plot(x', y , "o-");    // OK as is
+            subplot(222); plot(x , y , "o-");    // x is transposed
+            subplot(223); plot(x', y', "o-");    // y is transposed
+            subplot(224); plot(x , y', "o-");    // x and y are transposed
+        </scilab:image>
+        <para>
+            <emphasis role="bold">Case of a square Y matrix, and X implicit or square:</emphasis>
+        </para>
+        <programlisting role="example"><![CDATA[
+clf
+t = [1   1   1   1
+     2   3   4   5
+     3   4   5   6
+     4   5   6   7];
+
+subplot(231), plot(t,"o-") , title("plot(t)",  "fontsize",3)
+subplot(234), plot(t',"o-"), title("plot(t'')", "fontsize",3)
+
+subplot(232), plot(t,t,"o-") , title("plot(t, t)",  "fontsize",3)
+subplot(233), plot(t,t',"o-"), title("plot(t,t'')", "fontsize",3)
 
-//caso especial 2
-// caso onde apenas x ou y é uma matriz quadrada
-//x : matrix (t) e y  : vetor ([1 2 3 4])
-plot(t,[1 2 3 4]) // equivalente a plot(t,[1 1 1 1;2 2 2 2;3 3 3 3;4 4 4 4])
-plot(t,[1;2;3;4]) // o mesmo esboço
-clf();
-
-// t é transposto: note a prioridade dada ao tratamento das colunas
-plot(t',[1 2 3 4]) // equivalente a plot(t',[1 1 1 1;2 2 2 2;3 3 3 3;4 4 4 4])
-plot(t',[1 2 3 4]') // o mesmo esboço
-clf();
-
-// y é uma função definida por...
-// ..uma primitiva
-plot(1:0.1:10,sin) // equivalente a plot(1:0.1:10,sin(1:0.1:10))
-clf();
-
-// ...uma macro:
-deff('[y]=toto(x)','y=x.*x')
-plot(1:10,toto)
+subplot(235), plot(t', t,"o-"),  title("plot(t'', t)",   "fontsize",3)
+subplot(236), plot(t', t',"o-"), title("plot(t'', t'')", "fontsize",3)
+
+for i=1:6, gcf().children(i).data_bounds([1 3]) = 0.5; end
  ]]></programlisting>
+        <scilab:image>
+            clf
+            t = [1   1   1   1
+                 2   3   4   5
+                 3   4   5   6
+                 4   5   6   7];
+
+            subplot(231), plot(t,"o-") , title("plot(t)",  "fontsize",3)
+            subplot(234), plot(t',"o-"), title("plot(t'')", "fontsize",3)
+
+            subplot(232), plot(t,t,"o-") , title("plot(t, t)",  "fontsize",3)
+            subplot(233), plot(t,t',"o-"), title("plot(t,t'')", "fontsize",3)
+
+            subplot(235), plot(t', t,"o-"),  title("plot(t'', t)",   "fontsize",3)
+            subplot(236), plot(t', t',"o-"), title("plot(t'', t'')", "fontsize",3)
+
+            for i=1:6, gcf().children(i).data_bounds([1 3]) = 0.5; end
+
+            gcf().axes_size = [800 450];
+        </scilab:image>
+        <para>
+            <emphasis role="bold">Special cases of a matrix X and a vector Y:</emphasis>
+        </para>
+        <programlisting role="example"><![CDATA[
+clf
+X = [1   1   1   1
+     2   3   4   5
+     3   4   5   6
+     4   5   6   7];
+y = [1 2 3 4];
+
+subplot(221), plot(X, y,  "o-"), title("plot(X, row)",  "fontsize",3)
+        // equivalent to plot(t, [1 1 1 1; 2 2 2 2; 3 3 3 3; 4 4 4 4])
+subplot(223), plot(X, y', "o-"), title("plot(X, col)  (row = col'')",  "fontsize",3)
+subplot(222), plot(X',y,  "o-"), title("plot(X'', row)",  "fontsize",3)
+subplot(224), plot(X',y', "o-"), title("plot(X'', col)  (row = col'')",  "fontsize",3)
+
+for i = 1:4, gcf().children(i).data_bounds([1 3]) = 0.5; end
+ ]]></programlisting>
+        <scilab:image>
+            clf
+            X = [1   1   1   1
+                 2   3   4   5
+                 3   4   5   6
+                 4   5   6   7];
+            y = [1 2 3 4];
+
+            subplot(221), plot(X, y,  "o-"), title("plot(X, row)",  "fontsize",3)
+                    // equivalent to plot(t, [1 1 1 1; 2 2 2 2; 3 3 3 3; 4 4 4 4])
+            subplot(223), plot(X, y', "o-"), title("plot(X, col)  (row = col'')",  "fontsize",3)
+            subplot(222), plot(X',y,  "o-"), title("plot(X'', row)",  "fontsize",3)
+            subplot(224), plot(X',y', "o-"), title("plot(X'', col)  (row = col'')",  "fontsize",3)
+
+            for i = 1:4, gcf().children(i).data_bounds([1 3]) = 0.5; end
+        </scilab:image>
+        <para/>
+        <para>
+            <emphasis role="bold">Post-tuning Axes and curves:</emphasis>
+        </para>
+        <programlisting role="example"><![CDATA[
+x=[0:0.1:2*%pi]';
+plot(x-4,sin(x),x+2,cos(x))
+
+// axis centered at (0,0)
+a=gca(); // Handle on axes entity
+a.x_location = "origin";
+a.y_location = "right";
+isoview on
+
+// Some operations on entities created by plot ...
+a.children // list the children of the axes : here it is an Compound child composed of 2 entities
+poly1= a.children.children(2); //store polyline handle into poly1
+poly1.foreground = 4;  // another way to change the style...
+poly1.thickness = 3;   // ...and the thickness of a curve.
+poly1.clip_state='off' // clipping control
+isoview off
+ ]]></programlisting>
+        <scilab:image>
+            x = [0:0.1:2*%pi]';
+            plot(x-4,sin(x),x+2,cos(x))
+            a = gca();
+            a.x_location = "origin";
+            a.y_location = "origin";
+            isoview on
+            a.children
+            poly1 = a.children.children(2);
+            poly1.foreground = 4;
+            poly1.thickness = 3;
+            poly1.clip_state='off'
+            isoview off
+        </scilab:image>
     </refsection>
     <refsection role="see also">
         <title>Ver Também</title>
@@ -420,6 +621,18 @@ plot(1:10,toto)
                 <link linkend="plot2d">plot2d</link>
             </member>
             <member>
+                <link linkend="plot2d2">plot2d2</link>
+            </member>
+            <member>
+                <link linkend="plot2d3">plot2d3</link>
+            </member>
+            <member>
+                <link linkend="plot2d4">plot2d4</link>
+            </member>
+            <member>
+                <link linkend="param3d">param3d</link>
+            </member>
+            <member>
                 <link linkend="surf">surf</link>
             </member>
             <member>
@@ -456,6 +669,13 @@ plot(1:10,toto)
                     their "#RRGGBB" hexadecimal codes, or by their indices in the colormap.
                 </revdescription>
             </revision>
+            <revision>
+                <revnumber>6.0.2</revnumber>
+                <revdescription>
+                    Plotting a function fun(x, params) with input parameters is now possible with
+                    plot(x, list(fun, params)).
+                </revdescription>
+            </revision>
         </revhistory>
     </refsection>
 </refentry>
index d53b588..c5116ad 100644 (file)
@@ -2,6 +2,7 @@
 // Copyright (C) 2004-2006 - INRIA - Fabrice Leray
 // Copyright (C) 2008 - INRIA - Jean-Baptiste Silvy
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
+// Copyright (C) 2018 - Samuel GOUGEON
 //
 // This file is hereby licensed under the terms of the GNU GPL v2.0,
 // pursuant to article 5.3.4 of the CeCILL v.2.1.
@@ -32,12 +33,10 @@ function plot(varargin)
     end
 
 
-
     CurColor = 0; // current color used if no color specified via LineSpec
     // nor PropertyName
 
 
-
     ListArg = varargin;
 
     //detect and set the current axes now:
@@ -47,7 +46,8 @@ function plot(varargin)
             sca(ListArg(1));
             ListArg(1) = null(); // remove this parameter from the list
         else
-            warning("Handle should be an Axes handle")
+            msg = _("%s: Argument #%d: Graphic handle(s) of type ""%s"" expected.\n")
+            warning(msprintf(msg, "plot", 1, "Axes"))
             return;
         end
     end
@@ -70,8 +70,9 @@ function plot(varargin)
 
     for i=1:nv-1
         acceptedTypes=[];
-        acceptedTypes=find(Ttmp(i,1)==1 & or(Ttmp(i+1,1)==[1,13,130])) // to accept double, macro function or primitive as second argument
-
+        // double, macro function or primitive,
+        //    or list(macro|primitive, params) accepted as second argument
+        acceptedTypes=find(Ttmp(i,1)==1 & or(Ttmp(i+1,1)==[1,13,130,15])) 
         if (acceptedTypes<>[]) then
             couple=[couple i];
             Ttmp(i,1)  = 99; // Replace a known type by 99 (no meaning) to count it once only!
@@ -156,8 +157,6 @@ function plot(varargin)
         xyIndexLineSpec(1,1) = 0; // no x specified
         xyIndexLineSpec(1,2) = couple;
 
-        //pause;
-
         if (couple+1 < P1)
             if (argTypes(couple+1,1)==10) then // LineSpec treatment
                 xyIndexLineSpec(1,3) = couple+1;
@@ -185,8 +184,7 @@ function plot(varargin)
 
     FinalAgreg=[]; // Final Compound containing all the new created plots.
 
-    //for i=numplot:-1:1
-    for i=1:numplot
+    for i = 1:numplot
         // Set off auto_clear for allowing multiple graphics entity
         // will be restored behond
         if i>1 then
@@ -205,17 +203,33 @@ function plot(varargin)
 
             // A function (macro or primitive) is given:
             if (type(ListArg(xyIndexLineSpec(i,2))) == 13 | ..
-                type(ListArg(xyIndexLineSpec(i,2))) == 130)
+                type(ListArg(xyIndexLineSpec(i,2))) == 130| ..
+                type(ListArg(xyIndexLineSpec(i,2))) == 15)
                 //   We need to build the vector or matrix.
-                sizefirstarg = size(ListArg(xyIndexLineSpec(i,1)));
-                buildFunc = ListArg(xyIndexLineSpec(i,2));
                 firstarg = ListArg(xyIndexLineSpec(i,1));
+                sizefirstarg = size(firstarg);
+                secondarg = ListArg(xyIndexLineSpec(i,2));
+                params = list();
+                withParams = type(secondarg)==15
+                if withParams
+                    if size(secondarg)~=2 | and(type(secondarg(1))~=[13 130])
+                        ResetFigureDDM(current_figure, cur_draw_mode);
+                        msg = _("%s: wrong list() specification for the curve #%d.\n")
+                        error(msprintf(msg, "plot", i))
+                    end
+                    buildFunc = secondarg(1)
+                    secondarg(1) = null()
+                    params = secondarg
+                else
+                    buildFunc = secondarg
+                end
+
                 // We test if the function is vectorized:
                 isvectorized = %t;
                 try
-                    s1 = min(2,sizefirstarg(1,1))
-                    s2 = min(2,sizefirstarg(1,2))
-                    tmp = buildFunc(firstarg(1:s1,1:s2))
+                    s1 = min(3,sizefirstarg(1,1))
+                    s2 = min(3,sizefirstarg(1,2))
+                    tmp = buildFunc(firstarg(1:s1,1:s2), params(:))
                     isvectorized = and(size(tmp)==[s1 s2]);
                 catch
                     isvectorized = %f;
@@ -224,12 +238,12 @@ function plot(varargin)
                 // We evaluate ordinates accordingly:
                 try
                     if isvectorized
-                        tmp = buildFunc(firstarg);
+                        tmp = buildFunc(firstarg, params(:));
                     else
                         tmp = [];
                         for ii = 1:sizefirstarg(1,2)
                             for jj = 1:sizefirstarg(1,1)
-                                tmp(jj,ii) = buildFunc(firstarg(jj,ii));
+                                tmp(jj,ii) = buildFunc(firstarg(jj,ii), params(:));
                             end
                         end
                     end
@@ -247,12 +261,11 @@ function plot(varargin)
                     error(msprintf(msg1 + ascii(10) + msg2, "plot", ..
                         err_func, err_number, err_line, err_message));
                 end
-
                 // All right: go on plotting:
                 ListArg(xyIndexLineSpec(i,2)) = tmp;
                 // if there is another iteration, we will have error message redefining function.
                 // we need to clear here and not before, because user must see the warning if needed.
-                clear buildFunc;
+                clear buildFunc secondarg;
             end
             [X,Y] = checkXYPair(typeOfPlot,ListArg(xyIndexLineSpec(i,1)),ListArg(xyIndexLineSpec(i,2)),current_figure,cur_draw_mode)
         else
index f3825f4..ab02bfb 100644 (file)
@@ -1113,22 +1113,15 @@ plot3d_6.png=a491f1e7b84b7fbf50eb39a6d795fb81
 plot3d_7.png=b106077ec3b360ba717fef4579da3f55
 plot3d_8.png=d7ca9d9d5dd993d30bc6423a0528ff8e
 plot3d_9.png=c0f93d84e3ccdc76486bd41209b1f76b
-plot_1.png=f1b99772428f58ecb395a0e9d646467c
-plot_10.png=39217be67a065109f320385c67293b6e
-plot_11.png=3fbb963b7ebc42b5cf32d0443197c30b
-plot_12.png=59b89f2aa6e520bf84d04f4cc922e51
-plot_13.png=483a01785c6cf3d4e2fd579856fd1ac8
-plot_14.png=7dd661fc751b460aeb4f7f5614ee1e03
-plot_15.png=d60a53ee0d50caf6fae23be0613054e2
-plot_16.png=422149b7b3015c0185857b4a9eb1d966
-plot_2.png=1c9822aea3c0649c26bcd64a65bf39f7
-plot_3.png=ce8a2e0b714b49035e7529d78cd3a10f
-plot_4.png=1c8f1479946652d256e5ee7533690ea6
-plot_5.png=82aabbb95b90c8f3d3a7b8c3d384184e
-plot_6.png=76981d7518e409d672ee0752e8b7aef0
-plot_7.png=3e6f75be9834e9fd7f447db3767a3b6
-plot_8.png=d5e18d03116f8af7abcef68336ed5b9a
-plot_9.png=9d5a719f21284768e8d287ea3330cda4
+plot_1.png=ad242947214d2866107c147f5384e0a9
+plot_2.png=6549659743df2155be3061577f86c428
+plot_3.png=05411294e38970b93bd2e96047171bdd
+plot_4.png=f2a02f303bf4578fe0c029abc8f084dd
+plot_5.png=25b0dc1bfdba78e499055bedf79020dc
+plot_6.png=6530b1526ca007d68c095bb76295eade
+plot_7.png=df9a6a6decb537fae8a8adde2304a85a
+plot_8.png=7892b92465386a710d20d0a30cf46304
+plot_9.png=bead04d3923168e8291932e665abffa0
 polarplot_1.png=92b1189dd351372e587b472bad213e09
 polarplot_2.png=7a5f1cd3ef07687170c0de62231a2b5c
 polarplot_3.png=f11a25552a72c4454001c29b97073379