2d plotting with Gnuplot
Gnuplot is a command-line driven graphing utility that is available for many different operating systems.
Gnuplot is a powerful program that can be used to generate publication-quality figures. Here, we are going to introduce only a small subset of its features. If you are interested to learn more, have a look to the documentation.
gnuplot
starts the interactive Gnuplot console. This are some of the commands we are going to need:
plot sin(x) # use plot for 2d plots splot sin(x)*sin(y) # use splot for 3d plots plot 'spectrum.ener' using 1:4 # plot column 1 as x and column 4 as y replot 'spectrum.ener' using 1:($3+$5) title 'Total energy' set xlabel "time steps" set xrange [0:10] replot # redo the plot with current settings set terminal x11 enhanced font "arial,20" # increase font size help <command> # gnuplot has a very useful integrated help exit # leave gnuplot (loosing unsaved graphs)
Now you are ready to plot some actual data.
spectrum.ener
in the intro
folder contains results from a molecular dynamics simulation.
- Open the file in a text editor. What quantities does it contain?
- Plot the kinetic energy and potential energy versus time.
- Add the sum of kinetic and potential energy to the plot. In which type of ensemble was this MD simulation performed?
- Label the axes of the plot with appropriate quantities and units.
Later you will want to save your graphs in order to use them in your reports. This is done as follows:
set terminal png # we want to create a .png image set output "graph.png" # with filename "graph.png" replot # plot with current settings, directly into file "graph.png" set terminal x11 # switch back to plotting on screen
Gnuplot is not just a plotting utility, it can also perform fits.
Say, we have a data set data.dat
, which contains $x$ in the first column and some computed $f(x)$ in the second column.
We want to fit a function $f(x)=ax^2$ to this data set. In Gnuplot, this would be achieved by:
f(x) = a*x*x # Define function to be fitted a = 1 # initial guess for a fit f(x) "data.dat" using 0:1 via a
- Create a second plot, this time of temperature versus simulation time.
- Label axes of the plot with appropriate units.
- Use Gnuplot's fitting functionality to extract the average temperature.
Finally, once you have figured out which commands you need to create the plot you want, it is a good idea to write these commands to a file, say script.gp
. This has the advantage that gnuplot can re-create your graph in an instant. On the bash terminal type:
gnuplot script.gp # let gnuplot perform the commands in 'script.gp' gnuplot # alternative: start gnuplot load 'script.gp' # and load script from within gnuplot
This makes it very quick and easy to change details in the plot at a later point in time. Proficient gnuplot users will often start by writing the file, run it through gnuplot and then adjust the remaining details.