From help-octave-request at che dot utexas dot edu Wed Jul 20 06:45:59 1994 Subject: Plotting in Octave From: Ted Harding To: help-octave at che dot utexas dot edu Date: Wed, 20 Jul 1994 12:44:51 +0100 (BST) Dear All, 1. I have been trying to find source for a VGA console driver for GNUPLOT so as to use Gnuplot to view 'octave' graphs on my Linux console (I'm not using X), with the graphics handled by svgalib. I see references to "the Linux Driver" which suggest that this does the job, but I can't find source. Can anyone help? 2. This is a tip for octave users who may find it impossible, difficult or inconvenient to use 'gnuplot' to view graphs on their own screens (especially non-users of X), or who would like access to greater control over the plot, or far more enhancements, than 'gnuplot' provides. The package GLE as distributed for Linux includes a VGA option (binary file 'gle_vga', evoked by the command "gle -dvga"), which uses [s]vgalib to display graphics on the screen. GLE can be found in the sunsite.unc.edu Linux mirror as apps/math/gle-3.3g-bin.tar.gz (include the binary files for vga) apps/math/gle-3.3g-src.tar.gz (this does not include source for 'gle_vga') apps/math/gle.lsm apps/math/gle-postscript.docs.tar.gz The following three files, the first a skeleton command file for GLE, the second a minimal m-file for 'octave', the third an 'octave' utility to write column vectors and matrices out to a file, are all you need to plot the columns 2..k of an Nxk matrix X as curves against column 1. The octave command for this would be "glplot(X);" This function as written returns value "1". As written, you first see the GLE command-file for the plot. Press F10 (or ^F 0) to see the graph. From the graph, "RETURN" gets you back to the command file which you can edit to your taste and save under another name for future reference. While viewing the graph, you can use keys to move a cursor round the screen, draw lines, boxes; place text; etc. All such changes cause corresponding commands to be automatically entered into the command file you are viewing, and these too can be edited. As the need arises and the mood takes me, I shall be making similar arrangements to use GLE's surface-plotting and contouring functions within 'octave', and will post these; if anyone beats me to it (quite likely) it would be nice if they would do the same! Ted Harding Ted dot Harding at nessie dot mcc dot ac dot uk ======================================================================= file gle_plot.gle ================= This is a skeleton GLE file to plot columns 2..k of an Nxk data file severally against column 1. There are various empty "sockets" for assorted furniture: Ttitle, Xtitle, Ytitle, X2Title, Y1Title, box, table, key. See the GLE Manual for the various options and enhancements which can be used. Note that any textual item (e.g. Title) can include TeX-like specials to get Greek, Math, sup/sub, etc. ======================================================================== size 24 18 box set font pldr begin scale 1 1 begin graph size 24 18 Title "" Xtitle "" Ytitle "" X2Title "" Y2Title "" data gle_temp.dat dn line marker square end graph begin box end box begin table end table begin key end key end scale ========================================================================= File glplot.m ============= This file drives GLE as the plotting software under Octave. The work-space throughout is the current working directory. Data must be in columns (you could modify the file to check this). The first shell_cmd copies the above file 'gle_plot.gle' to the current working directory (This seems necessary because GLE tends to treat "/" as a switch, so doesn't recognise UNIX paths properly). Replace the pathname in this command with wherever you decide to store the file gle_plot.gle permanently. ============================================= function s = glplot(X) % Plots the data in matrix X as graphs using 'gle'. % The column X(:,1) is the set of x'values; % the columns X(:,i) i=2..k give the y-values for the several curves. write("gle_temp.dat","%.4f",X); shell_cmd("cp /usr/local/lib/octave/1.0/ted/gle_plot.gle ."); shell_cmd("gle -dvga gle_plot.gle > /dev/tty"); shell_cmd("rm gle_temp.dat"); s=1; ========================================================================= file write.m ============ function write(file,fmt,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10) #H #H write('filename','format',x1,x2,x3,x4,x5,x6,x7,x8,x9,x10) #H #H writes the data in the rows of matrices x1,x2,... #H side-by-side into the rows of (APPEND mode). #H #H 'format' is a C f,e or g format (e.g.'%7.4f') for a single number. #H 'format' is mandatory, 'filename' is optional and, if omitted, #H output is to the screen. If exists it is over-written #H (to change this, change the commented line below) #H #H There must be at least one matrix argument x1, and at most 10. #H The matrices x1, x2, ... are output side by side; all must have the #H same number of rows. #H strargs=1; if isstr(fmt), strargs=2; end if strargs==1, FIL="stdout"; X=fmt; FMT=file; P=1; else X=[]; FMT=fmt; FIL=file; P=0; end if (nargin-strargs)>P+0, X=[X x1]; end if (nargin-strargs)>P+1, X=[X x2]; end if (nargin-strargs)>P+2, X=[X x3]; end if (nargin-strargs)>P+3, X=[X x4]; end if (nargin-strargs)>P+4, X=[X x5]; end if (nargin-strargs)>P+5, X=[X x6]; end if (nargin-strargs)>P+6, X=[X x7]; end if (nargin-strargs)>P+7, X=[X x8]; end if (nargin-strargs)>P+8, X=[X x9]; end if (nargin-strargs)>P+9, X=[X x10]; end S=size(X); R=S(1); C=S(2); fopen(FIL,"w"); % Change this to "a" to APPEND to an existing file for i=1:R for j=1:C fprintf(FIL,FMT,X(i,j)), fprintf(FIL,' '), end, fprintf(FIL,'\n') end fflush(FIL); if (strargs==2) fclose(FIL); end ========================================================================= Ted Harding Ted dot Harding at nessie dot mcc dot ac dot uk