Getting a gnuplot output from a script - gnuplot

I have a script that closes immediately after opening. I've tried pause -1, but then I have an empty window. I've also tried set output but apparently I can't do that with multiplot
Is there a way to set output while using multiplot?
I tried setting output before setting multiplot, but the ps file was blank
Edit: The solution I found most useful was "pause mouse". I was also told I could use set output and just do "plot file1, file2, file3", but I'm having some issues with the syntax for that.

I typically set the output (and terminal) before going in multiplot mode. One thing you may be noticing is that some terminals don't draw the plots in a multiplot until you unset multiplot (see help multiplot).
The following works.
set term post enh color
set output "foo.ps"
set multiplot layout 2,1
plot sin(x)
plot cos(x)
unset multiplot
One issue with multiplot is that often you want to see the plot (e.g. using x11) and also put it in a file (e.g. postscript). The cleanest way to do this is using the load command:
#foo.gp
set multiplot layout 2,1
plot sin(x)
plot cos(x)
unset multiplot
Now you can call this:
set term x11 persist
load "foo.gp"
set term post enh color
set output 'foo.ps'
load 'foo.gp'

Related

How to put two plots with inset side by side in gnuplot?

I am trying to create two plots in Gnuplot side by side using multiplot. The problem is that how can I add inset to each one.
I wanted to point your attention to the gnuplot demo page (gnuplot demo page), however, I couldn't find an example of such insets in multiplots right away.
Simply use set multiplot layout 1,2 and continue plotting but with different sizes and offsets. See example below:
Code:
### multiplot with insets
reset session
set multiplot layout 1,2
plot x**2
plot x**3
set size 0.3,0.3
set origin 0.1,0.6
set ytics 0.5
plot sin(x)
set size 0.3,0.3
set origin 0.6,0.6
plot cos(x)
unset multiplot
### end of code
Result:

Is there a bug in Gnuplot 5.2 (patch 5) with `multiplot` command?

I'm running Gnuplot version 5.2, patch level 5, and I am getting unexpected behavior from the multiplot command. In efforts to produce two plots, one smaller and superimposed on the larger one, I am using the multiplot environment in the following way:
reset
set multiplot
set origin 0,0
set size 1,1
plot "first_file.dat"
set origin 5,5
set size 0.5,0.5
plot "second_file.dat"
unset multiplot
When I first run set multiplot an empty canvas shows up that I close. Then, when I enter unset multiplot nothing happens. From following instructions online it seems like the unset command is supposed to produce the plot, but it doesn't. Am I doing something wrong, or is there a potential bug with this version?
Why do you close the empty canvas? You won't see anything until you plot your data. The following code gives two superimposed plots. However, the set origin coordinates are relative to the screen (ranging from 0.0,0.0 to 1.0,1.0). If you want to place the second graph relative to some coordinates of the first graph, this probably would require some calculations.
reset session
set colorsequence classic
set multiplot # will show an emtpy canvas
plot sin(x) lt 1 # will show the first plot
set origin 0.1, 0.45 # origin coordinates are relative to the screen
# not to the coordinates of the first plot
set size 0.5,0.5
plot cos(x) lt 2 # will show the second plot on top of the first plot
unset multiplot
Result (wxt terminal):

How to write expectation value symbols in gnuplot

I need to write one of my axis label as $\langle\alpha\rangle$. I don't know how to get this Dirac notation in gnuplot. Can someone help.
One solution might be to use Gnuplot as a "pre-processing" tool in order to generate a template which is then compiled with LaTeX. To this end, consider for example following Gnuplot script:
set terminal lua tikz size 8cm,6cm clip background rgb '#ffffff'
set output 'frame.tex'
set xr [0:10]
set yr [0:10]
set xtics out nomirror
set ytics out nomirror
set key bottom right reverse spacing 2 width 2
set xlabel '$\langle\alpha\rangle$'
set ylabel '$f(\langle\alpha\rangle)$'
plot x t '$f(\langle\alpha\rangle)$'
When supplied to Gnuplot, it produces a file frame.tex. However, this is not a standalone LaTeX document, just the plot itself rendered with the famous TikZ package. Nevertheless, it is rather straightforward to embed it in a document as:
\documentclass[aip,jcp,reprint,amsmath,12pt]{revtex4-1}
\usepackage[utf8]{inputenc}
\usepackage[margin=0pt,papersize={8cm,6cm},headheight=0pt]{geometry}
\usepackage{graphicx}
\usepackage{tikz, fp, scalefnt, ifthen}
\usepackage{gnuplot-lua-tikz}
\usepgflibrary{fixedpointarithmetic}
\pagestyle{empty}
\setlength{\fboxsep}{0pt}
\setlength{\parskip}{0pt}
\setlength{\parindent}{0pt}
\begin{document}
\begin{widetext}
\input{frame.tex}%
\end{widetext}
\end{document}
If this file is called for example figure.tex, then pdflatex figure.tex produces:

gnuplot multiplot images in column

I'm trying to use multiplot to stack two image plots on top of one another, in a column. When I try to test this with x11 terminal, the images are produced separately, only one visible at a time. When I use the epslatex terminal, which is what I want, then the text is drawn correctly within the LaTeX document, but the EPS portion of the plot is produced as two separate pages, resulting in a figure that is missing a lower half.
Here's the multiplot section of my script:
set multiplot 2,1
set cbrange [-0.4:0.4]
set cbtics -0.4,0.2,0.4
unset xlabel
set tmargin at screen 0.95
set bmargin at screen 0.60
plot data u 1:2:3 with image notitle
set cbrange [-0.1:0.1]
set cbtics -0.1,0.05,0.1
set xlabel "$x$"
set tmargin at screen 0.50
set bmargin at screen 0.15
plot data u 1:2:3 with image notitle
unset multiplot
unset output
What results in the document is this:
I have tried enlarging the vertical size of the plotting area(per this question), but what this does is increase size of each page in the EPS file. To be clear, the product of plotting with epslatex is an EPS file containing two pages, the first with the first plot at the position that I want (near the top), and the second with the second plot at the position that I want (near the bottom).
This normally happens when you are not in multiplot mode. For me, set multiplot 2,1 gives an error message "only valid in the context of an auto-layout command". The command set multiplot layout 2,1 works with Gnuplot 5.0 and 4.6.
As a side note: This behavior can be used to produce animated gifs with set terminal gif animate, each plot command creates a new frame.

Rotating 3D plots with the mouse in multiplot mode

When I do the following in gnuplot ...
set terminal x11
splot sin(x)
I can rotate the 3d plot with the mouse
On the other hand, if I do the following
set terminal x11
set multiplot layout 1,2
splot sin(x)
splot cos(x)
I can't rotate sin(x) or cos(x) even though I would love to. Does anybody know if it is possible to create a multiplot with plots that you can rotate?
Unfortunately you can't. Ethan A. Merritt, one of the gnuplot developers, here explained why:
Fundamental limitation. The "multiplot" command is best understood as
meaning "don't start a new page for the next plot". So your commands
have created two separate plots, that just happen to be on the same
page. Gnuplot only tracks the data for one plot at a time, so you can
only redraw the most recent plot. All earlier plots are long gone.

Resources