I have a “macro” on my vim configuration file which expands the text “figgnuplot” to the following template. This is useful to create a new gnuplot figure because I tend to forget about my own name, let alone computer syntax… Use it as you want but understand that this is meant to be run using latex and some snippets.
# gnuplot epslatex template
# Pau Amaro Seoane, Berlin, 25/Apr/2020
#
# This style is meant to be used along with Gnuplot.sh
# and GpTex.sh
#
# To be used as
#
# $ Gnuplot.sh myscript.gnu
#
# This produces out.pdf and opens it with a pdf viewer
# ******************** load snippets ******************** #
# This assumes that you have a symlink ~/.gnuplot pointing to gnuplotrc
# In my case it is .gnuplot@ -> /home/pau/fitx_confg/gnuplot/gnuplotrc
# In gnuplotrc you add the line:
# set loadpath "/home/user/path/snippets:/home/user/path/palettes"
# Do not use $HOME because it won't expand.
load 'header.cfg'
load 'lines.cfg'
load 'grid.cfg'
load 'lightborder.cfg'
load 'arrows.cfg'
load 'constants.cfg'
load 'convfactors.cfg'
# ******************** definitions and styles ******************** #
# Scales, ranges and tics
#set logscale xy
# set xtics rotate by 45 right # if you want them rotated by 45 (suprise!)
set mxtics 2 # 10 for log style
set mytics 2 # 10 for log style
set xrange [*:*]
set yrange [*:*]
#set y2range [*:*] # unset if second y-axis, and multiply by the
# conversion factor both, ymin and ymax, unless you want
# different curves in the plot. E.g.
# set yrange [1, 10] in meters
# set y2range [1/1e3, 10/1e3] in km
#set xtics add ('0' 0, '1' 1) # "add" is important in log
#set ytics add ('0' 0, '1' 1) # otherwise mx- and mytics disappear
# set my2tics 2 # unset this if second y-axis
#set y2tics ystart,ystep # the first parameter is the starting value at the bottom of the graph,
# and the second is the interval between tics on the axis (optional)
#set ytics nomirror # unset this if second y-axis
# Power styles
# Sometimes this might be bugy
# if used with set logscale xy
# Try to comment it out if strange
# problems appear
#set format x "$%.0s \\times 10^{%S}$" # Not setting the $$ might lead to
#set format y "$%.0s \\times 10^{%S}$" # problems if using y2
# Another possibility: "$10^{%L}$"
# ******************** key ******************** #
set key left bottom
#unset key
#set key at X,Y # X on the right side of the legend ------ Y
# Y at the top of the legend | X
#set key font ",20" # sets it to 20
# ******************** labels ******************** #
set xlabel "Xlabel (pc)"
set ylabel "Ylabel ($t^{-1}$)" # offset -1.5,2,0 # moves ylabel -1.5 characters
# away the x axis, 2 towards y,
# and 0 towards z
# (relative to its original position)
# set y2label "Y2label ($T^{-1}$)" # offset 0.1,0 # if second y-axis is used
# ******************** main plot ******************** #
# set samples 1000 # get smoother curves
# NB: If using log scale, gnuplot might cut the
# curve because of a lack of resolution; make
# samples much larger
#set multiplot # uncomment only if you have embedded, smaller plots
plot f(x) title "" with lines ls 1, \
g(x) title "" with lines ls 2, \
h(x) title "" with lines ls 3, \
i(x) title "" with lines ls 4
# Want a power-line? Do this:
#plot f(x) title "" with lines ls 1, \
# [1:2] 3e4 * x**(-1.75) with lines ls 1 dashtype 3 linewidth 2 title "bo"
# [rang in x axis] multiplying factor * x**(yourpower) with lines ls 1 dashtype 3 linewidth 2 title "straight line"
# If second y-axis present, then
#plot f(x) title "" with lines ls 1 axis x1y1, \
# g(x) title "" with lines ls 2 axis x1y1, \
# h(x) title "" with lines ls 3 axis x1y1, \
# i(x) title "" with lines ls 4 axis x1y1, \
# j(x) title "" with lines ls 1 axis x1y2, \
# k(x) title "" with lines ls 2 axis x1y2, \
# l(x) title "" with lines ls 3 axis x1y2, \
# m(x) title "" with lines ls 4 axis x1y2
# Reading data files
# set datafile commentschars { "#" | "%" }
# set datafile separator { "," | whitespace }
# ******************** embedded, smaller plots (zooms) ******************** #
# You need to uncomment the "set multiplot" line above
# It's better to remove the grid from the larger plot and
# add only grids to the smaller plots, because they otherwise
# overlap
# Grid
#set style line 102 lc rgb '#808080' lt 0 lw 1
#set grid back ls 102
# Origin
#set origin X,Y # between [0, 1]
#set size X-length, Y-length # between [0, 1]
#set xrange [xmin:xmax]
#set yrange [ymin:ymax]
# Labels
#unset xlabel
#unset ylabel
#unset label
#set xtics ('1' 1, '2' 2)
#set ytics ('0' 0, '2' 2)
# Format of box and tics
#set tics scale 0.5 front
#set border linewidth 3
# Plot
#plot f(x) title "" with lines ls 1, \
# g(x) title "" with lines ls 2, \
# h(x) title "" with lines ls 3, \
# i(x) title "" with lines ls 4
# After the embedded, smaller plots, we need to unset multiplot
#unset multiplot
# ******************** back to x11 ******************** #
set terminal x11
# ******************** dump analytic function to a table ******************** #
# set table "out.dat"
# plot '+' u (sprintf("%g,%g,%g,%g,%g",x , f(x) , g(x) , h(x) , i(x))) w table
# unset table
# ******************** use python programmes ******************** #
# You can use python programmes from "outside" which allow you to do more things.
# One example is the Bessel functions of any order. Gnuplot is limited to first order.
#
# To defined a new function, simply create a programme.py and call it like this
#
# bessel(n,x) = real(system(sprintf("python bessel1stkind.py %g %g", n, x)))
#
# where
#
# $ cat bessel1stkind.py
# import sys
# import numpy as np
# from scipy.special import *
#
# n=float(sys.argv[1])
# x=float(sys.argv[2])
#
# print (jn(n,x))
#
# Then simply use it in gnuplot
#
# gnuplot> print bessel(1,1)
# 0.440050585744934
# gnuplot> print bessel(-2,1)
# 0.114903484931901
# ******************** style: hints ******************** #
# Some help on style:
# http://en.wikipedia.org/wiki/Wikipedia:How_to_create_charts_for_Wikipedia_articles#gnuplot
# http://en.wikipedia.org/wiki/File:Ps_symbols_color.png
# http://en.wikipedia.org/wiki/File:Ps_symbols_color_solid.png
# http://upload.wikimedia.org/wikipedia/commons/2/2a/Ps_symbols_bw.png
# See also the local files:
# qiv -t ~/treball/documents/manuals/gnuplot/Ps_symbols_color.png
# qiv -t ~/treball/documents/manuals/gnuplot/Ps_symbols_color_solid.png
# qiv -t ~/treball/documents/manuals/gnuplot/Ps_symbols_bw.png
# ******************** format tics ******************** #
# Some style about format:
# http://lowrank.net/gnuplot/tics-e.html
# gnuplot> set format x "%10.3f"
#
# The syntax for the digit is "%" + (total length).(precision). The floating
# number 6.2 represents that the total length is six and there are two digits
# following the decimal point, so that tic-labels are shown as "5.00". It is
# possible to omit the length or precision, like 6 or .2. The default values are
# used for the omitted number.
#
# The display format is expressed by one letter -- 'f', 'e', 'E', 'g', 'x', 'X',
# 'o', 't', 'l', 's', 'T', 'L', 'S', 'c', and 'P'. The default is "%g". When the
# tics-labels can be expressed by appropriate length and precision, those are
# written by "%.0f" format, otherwise "%e" format is used. The next table shows
# the difference among the format 'f', 'e', 'x', and 'o'. The formats 'e' and 'E'
# are the same except that the written text is 'e' or 'E'. The format "%O" exists
# in the gnuplot manual, but it does not work (bug ?)
#
# Format Explanation Example (underscore means blank)
# f decimal %6.3f __6.00
# e,E exponential %11.4e _5.0000e+01
# x,X hexadecimal %x fffffffb
# o,O octal %o 37777766
#
# The formats, 't', 'l', 'T', and 'L' are related to log-scale plot.
# ******************** samples ******************** #
# Gnuplot doesn't really draw curves for functions - it actually computes the
# functions at multiple points and connects them with straight lines, similarly
# to what would happen if you were plotting a data file
#
# Sometimes when plotting analytical functions which span over many orders of
# magnitude, gnuplot does not have enough resolution, even if you set it to the
# maximum, which is about 8e6. For _one_ curve it should be enough but sometimes
# we are plotting various curves, so that the sampling is divided by the number
# of curves and hence, each curve has a lower sampling. This should be avoided
# because some extreme values might be missing.
#
# The fix for this is the following
#
# 1) output to a file with the data
#
# set table "g.dat"
#
# 2) Plot each of the curves. If you have the functions g(x), h(x) and i(x),
#
# set samples 30*number of maxima (as a rule of thumb)
# set table "g.dat"
# plot g(x)
# unset table
#
# then
#
# set table "h.dat"
# plot h(x)
# unset table
#
# then
#
# set table "i.dat"
# plot i(x)
# unset table
#
# After that, in the gnu script you use
#
# plot "g.dat" u 1:2 with lines ... ,\
# "h.dat" u 1:2 with lines ... ,\
# "i.dat" u 1:2 with lines ... ,\
#
# And this way the functions g(x), h(x) and i(x) will have a higher resolution.