This is an old revision of the document!
A quick plot is enough when you are exploring a data set or a function. But when you present your results to others you need to prepare the plots much more carefully so that they give the information to someone who does not know all the background you do.
Using PostScript plots with LaTeX
scatter plot: plot ’data.txt’ using 1:2 plot ’data.txt’ using 1:2 with points example for the short format: p ’data.txt’ u 1:2 w p pt 1 lt 2 lw 2 notitle line plot: plot ’data.txt’ using 1:2 with lines multiple data series: use replot or separate by commas plot ’data.txt’ using 1:2, ’data.csv’ using 1:3 set key: plot ’data.txt’ using 1:2 title "key"
Q: How to plot col(A):col(B) if col(C) == 0? A: plot ‘dataset.txt’ using 1:($3==0?$2:1/0) Q: What if we want to plot conditionally on another column containing text? A: plot ‘dataset.txt’ using 1:(stringcolumn(3) eq “a”? $2:1/0) title “a” lc rgb “blue” ,\ “” using 1:(stringcolumn(3) eq “b”? $2:1/0) title “b” lc rgb “red”
Q: What is ‘stats’? Syntax: stats 'filename' [using N[:M]] [name 'prefix'] [[no]output]] Example: stats "dataset.txt" using 2 name "A" Q: How to draw a rectangle with a colored border in gnuplot? Syntax: set object <index> rectangle {from <position> {to|rto} <position> | center <position> size <w>,<h> | at <position> size <w>,<h>} # Force the entire area enclosed by the axes to have background color cyan set object 1 rect from graph 0, graph 0 to graph 1, graph 1 back set object 1 rect fc rgb "cyan" fillstyle solid 1.0 # Position a red square with lower left at 0,0 and upper right at 2,3 set object 2 rect from 0,0 to 2,3 fc lt 1 # Position an empty rectangle (no fill) with a blue border set object 3 rect from 0,0 to 2,3 fs empty border rgb "blue" # Return fill and color to the default style but leave vertices unchanged set object 2 rect default
timecolumn() function parses a time string from a column according to the set timefmt settings. The result is a time stamp in seconds.
set xdata time set timefmt "%H:%S" set format x "%H" set style fill solid 0.6 border -1 set boxwidth 0.3 relative set xrange["00:00":"23:30"] set style data boxes plot 'dataset.txt' using 1:2, \ '' using (timecolumn(1)+60*20):($2*0.5), \ '' using (timecolumn(1)+60*40):($2*0.7)
#example_1 plot 'dataset.txt' every I:J:K:L:M:N plot 'dataset.txt' every 2 # Plot every 2 lines plot 'dataset.txt' every ::3 # Plot starting from the 3rd line plot 'dataset.txt' every ::3::15 # Plot lines 3-15 #example_2 do for [t=0:50] { outfile = sprintf('animation/bessel%03.0f.png',t) set output outfile splot u*sin(v),u*cos(v),bessel(u,t/50.0) w pm3d ls 1 pause 0.02 }
There are two different ways to draw heatmaps with gnuplot:
Palette is a color storage for use by pm3d, filled color contours or polygons, color histograms, color gradient background.
set palette (i.e. without options): sets up the default values set palette gray switches to a gray only palette set palette rgbformulae, set palette defined, set palette file and set palette functionsswitch to a color mapping. set palette color is an easy way to switch back from the gray palette to the last color mapping.
Interpolate: The option interpolate m,n will interpolate between grid points to generate a finer mesh. For data files, this smooths the color surface and enhances the contrast of spikes in the surface.
How can we include the graphics produced by Gnuplot into a TEX document?
# install texlive apt-get install texlive # create 'text.gp' and add set terminal latex set out 'plot.tex' plot [-5:5] [-1.5:1.5] sin(x+pi) title "$\\sin(x+\\pi)$" set out # run it gnuplot test.gp # text editor: create example.tex and put some content in it \documentclass{article} \begin{document} \input{plot.tex} \end{document} # run latex on it to produce some output # ..don't worry about most of this output -- the important part is the Output written on example.dvi line, which says that it was successful. latex example.tex # now you need to view the output file with xdvi # this will pop up a window with the beautifully formatted output in it. Hit `q' to quit this, or you can leave it open and it will automatically update when the example.dvi file is modified (so whenever you run latex to update the output). xdvi ex1.dvi & # to produce a PDF of this you simply run pdflatex instead of latex # ..and you'll have an example.pdf file created instead of the example.dvi file. pdflatex example.tex
Using Gnuplot, generate two separate bar graphs for the following:
The ratio is considered to be high enough when $6/$4 > 1. This will help you spot the people who live less healthy. The graphs should be as complete as possible (title, axes names, etc.).
Use Gnuplot to generate the following graphs:
Using the code provided in “Tutorial 02. Time-based data when plotting in gnuplot”, use the histogram style, and format the xtic labels using strftime and timecolumn.
set timefmt "%H:%S" set style fill solid 0.6 border -1 set style data histogram set style histogram clustered gap 1 plot 'data.dat' using 2:xtic(strftime('%H', timecolumn(1))), \ '' using ($2*0.5), \ '' using ($2*0.7)
Using Gnuplot, create multiple histograms with 'set style histogram' and 'boxes'.
Create a simple bar graph. Remember to make the lines solid.
Using Gnuplot, create heatmaps using:
Create heatmap WITHOUT interpolation;
Use Gnuplot to create three 2D maps in a single 3D graph. Export the result as a .pdf file (using gnuplottex package) and include also a \caption{Describe how you did the exercise}. Hint: You have to give the splot command 4 pieces of information: the x, y, and the z coordinate,and the value for the color.
set view 55,110 splot "heat_map_data.txt" matrix u 1:2:(-0.5):3 w image, \ "" matrix u 1:(-0.5):2:3 w image, \ "" matrix u (-0.5):1:2:3 w image
Create myscript.tex and add the lines below. You should put in your 'begin{gnuplot}…end{gnuplot}' your solution for plotting. The main advantage for using gnuplottex is that you are allowed to use gnuplot directly inside the .tex file.
\documentclass[a4paper]{article} \usepackage{gnuplottex} \begin{document} \begin{gnuplot}[terminal=pdf,terminaloptions={font ",10" linewidth 3}] plot sin(x), cos(x) \end{gnuplot} \begin{gnuplot}[scale=0.8] set grid set title 'gnuplottex test $e^x$' set ylabel '$y$' set xlabel '$x$' plot exp(x) with linespoints \end{gnuplot} \end{document}
Compile it! Your final result should look like this: myscript.pdf.
#compile with pdflatex --shell-escape myscript.tex
Observations: If gnuplottex is missing, here is gnuplottex.sty