In interactive mode gnuplot remembers all the settings for the current plot. It knows what to do when I type 'replot'. So, is there a way to dump all of the current settings into a script file?
See the save command.
You use it as follows:
save "My_stuff_goes_to_this_file.txt"
Here's a (small) excerpt from the docs:
The save command saves user-defined functions, variables, the set
term status, all set options, or all of these, plus the last plot
(splot) command to the specified file.
Syntax:
save {option} 'filename'
Related
It would be handy to have gnuplot write particular settings to an output file, ideally in a .svg, because svg appears very well suited for that - so the image file and settings are all together - however, it appears this is not feasible directly in gnuplot.
Working within the wxt and svg terminals, and especially multiplot, I have been able to see how gnuplot might interface with the shell (for example):
! ls ; pwd ; echo $0, print sin(pi), show terminal. Trouble happens though when trying usual redirection such as > foo.txt and such - even starting a separate gnuplot session by script just to get the parameters. In particular, I found this interesting :
output is sent to STDOUT
print output is sent to '<stderr>'
... though I'm not sure what to do with that.
I could use e.g. ! cat gnuplot.inp | grep terminal >> gnuplot.svg, and dig into further awk/sed scripting, but before doing that it would help to know if I'm missing any small details in gnuplot first. Thanks.
PS a trivial question : why is the shell in gnuplot sh, when the plain-old linux terminal shell I am using is bash and SHELL=/bin/bash? I notice that shell drops the session into the shell from which gnuplot was executed - not sure if that will help the task.
1 The usual way to save current settings to a file is the command save "filename". There is a script in the gnuplot repository called gpsavediff (it may or may not be included in your distro's gnuplot package) that compares the saved values to the default settings and keeps only the ones that changed. From a gnuplot session under linux a typical use would be
... do a bunch of stuff to make a plot ...
save "| gpsavediff > myplot.gp"
... do a bunch more stuff ...
# recover original plot
reset session
load "myplot.gp"
To write specific lines or text to a file is much simpler than you show. For instance
.
set print "session.log" append
print "# This plot looked good on the screen."
print "# At this point the view angles were ", GPVAL_VIEW_ROT_X, GPVAL_VIEW_ROT_Z
print "# I save a PostScript copy to foo.ps"
set term push
set term postscript color
set output "foo.ps"
replot
unset output
set term pop
...
When invoking a shell, gnuplot uses the libc library function popen(). The gory details of popen() are somewhat system dependent but you probably have a man page for it.
gpsavediff script here
I am very new to Gnuplot. I have previously used Rstudio, which has a script (which you can write a command and then edit it later and rerun it) and also a console. Does gnuplot have this script equivalent? I notice after writing a command incorrectly I can't delete it. However, I want to save a document only containing correct commands so I can revisiting the code. Any suggestions would be appreciated.
Gnuplot has a "save " command. The file it produces contains the entire set of commands necessary to reproduce the current state of the program, including the most recent plot. Most of the commands in the saved file are not relevant to that particular plot, however, because they explicitly set a property to a value that was already the default. To remove these unneeded commands you can filter the saved file through a script gpsavediff, which can be downloaded from the gnuplot web site if you don't already have a copy with your installed version. The save + filter operation can either be done in two separate steps:
gnuplot> ... lots of stuff including a plot command ...
gnuplot> save 'myverboseplot.gp'
gnuplot> exit
gpsavediff < myverboseplot.gp > myplot.gp
or it can be done all once using a piped command:
gnuplot> ... lots of stuff ...
gnuplot> save '| gpsavediff > myplot.gp'
You can further edit the commands in the saved script just as you would any other text document.
I'm looking for a way to load a custom command to my gnuplot sessions. Often after playing around with a plot I want to output it to PDF, and continue working. This will look like:
set terminal pdf
set output 'somefilename.pdf'
replot
set terminal qt
replot
Currently the best I can do is put that in a separate file with the file name a variable instead of a string, define said variable in my session, then load said file. I'm wondering if I can load this script as a command that takes an argument, so I can do something like
exportpdf "myfile.pdf"
I think your your current method is already pretty good, but if you want you can fine-tune it a little bit:
If you are willing to keep storing the name of the file in a gnuplot variable FILENAME, then you can circumvent the need of an external file by using macros:
exportpdf="set term push; set term pdf; set output FILENAME; replot; set output; set term pop"
You can then save your current figure by executing
#exportpdf
If you want to give the filename as an argument you can create a script file exportpdf.gp
set term push
set term pdf
set output ARG1
replot
set output
set term pop
and define the string
exportpdf='call "exportpdf.gp"'
for example in your startup file. Then you can save your current figure to filename simply by executing
#exportpdf "filename.pdf"
if you want to define a custom "function", you could first construct the appropriate command and then evaluate it:
plotPdf(fname) = eval(sprintf("set terminal pdf;set output '%s';replot;set terminal qt;replot;", fname))
this definition can be then conveniently placed in the Gnuplot startup script so that it is automatically available
I want gnuplot to read a script and produce graphs accordingly.
what kind of file should the script be and what is the syntax of reading the file.
To run a script called 'filename', you can type
gnuplot "filename"
or from within an interactive gnuplot environment you can load a script file by typing
load "filename"
Edit: As per Gabriel's comment below, you can let the plot generated by a script persist and close your gnuplot session by using the -p or --persist option. Do note that the plot which persists won't have any interactive features like zooming/scrolling.
gnuplot -p "filename"
More info available on the gnuplot official documentation(page 22)
In gnuplot, using the commands
set term pdf
set out 'filename.pdf'
plot sin(x)
allows me to write the image to a pdf. After doing so, how do I reset the output so that plot sin(x) creates the image using the built-in gnuplot display (as it does without ever have using set out in the first place).
Right now I can only acheive this by restarting gnuplot. The reset command does not seem to help. Thanks all!
In addition to the other answer, you could do:
set term pop
set output #reset standard output stream
In general, you can save the terminal settings you're currently working one using:
set term ... #what you want to save
set term push
set term ... #temporary terminal
set term pop #restore the terminal settings that you "pushed"
However, as documented in help set terminal:
The command set term push remembers the current terminal including its
settings while set term pop restores it. This is equivalent to save term
and load term, but without accessing the filesystem. Therefore they can be
used to achieve platform independent restoring of the terminal after printing,
for instance. After gnuplot's startup, the default terminal or that from
startup file is pushed automatically. Therefore portable scripts can rely
that set term pop restores the default terminal on a given platform unless
another terminal has been pushed explicitly.
Assuming you have the X11 version of gnuplot installed. Set the terminal back to x11 and reset the output
set term x11
set out