[NTG-context] m-graph read data and plot

Hans Hagen pragma at wxs.nl
Thu Aug 13 22:31:23 CEST 2015


On 8/13/2015 9:37 PM, John Kitzmiller wrote:
> On Aug 9, 2015, at 8:38 AM, Alan BRASLAU <alan.braslau at cea.fr
> <mailto:alan.braslau at cea.fr>> wrote:
>>
>> One needs to think about closing the data file as ConTeXt opens a single
>> MP instance that is run throughout the entire document AND over its
>> multiple runs. If the file is left open, a second run will try to read
>> on from the point where it left off.
>>
>> THIS IS A SUBTLE POINT THAT SHOULD BE NOTICED BY ALL MPLIB USERS!
>
> Thank you for this insight Alan! Two results immediately helpful are:
> 1) data can be put at the top of the .tex file
> 2) autogrids can be rendered and then drawn over
>
> The following may not be the best way, but it works to read data from
> the top of the .tex file and then plot on the autogrid.
>
> % 1 0.5 2.5
> % 2 1 3.5
>
> \usemodule[graph]
> \startMPpage[instance=graph,offset=2mm]
>    draw begingraph(3cm,5cm);
>    numeric a[];
>      gdata("read1.tex", v,
>        setrange(0,0,3,4);
>      );
>      closefrom "read1.tex";
>
>      autogrid(,grid.lft) withcolor .7white;
>
>      gdata("read1.tex",v,
>      for j = 1 upto 3:
>          a[j] := scantokens v[j];
>        endfor;
>        path b;
>        augment.b(a1,a2);
>        augment.b(a1,a3);
>        setrange(0,0,3,4);
>        gdraw b;
>      );
>      closefrom "read1.tex";
>    endgraph;
> \stopMPpage

an apetizer:

\usemodule[graph]

\startluacode
     local d = nil
     function MP.set(data)
         d = data
     end
     function MP.n()
         mp.print(d and #d or 0)
     end
     function MP.get(i,j)
         mp.print(d and d[i] and d[i][j] or 0)
     end
\stopluacode

\startluacode
     MP.set {
         { 1, 0.5, 2.5 },
         { 2, 1.0, 3.5 },
     }
\stopluacode

\startMPpage[instance=graph,offset=2mm]
draw begingraph(3cm,5cm);
     numeric a[];
     for j = 1 upto MP.n() :
         path b;
         augment.b(MP.get(j,1),MP.get(j,2));
         augment.b(MP.get(j,1),MP.get(j,3));
         setrange(0,0,3,4);
         gdraw b;
         endfor ;
endgraph ;
\stopMPpage




-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
     tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com
                                              | www.pragma-pod.nl
-----------------------------------------------------------------


More information about the ntg-context mailing list