Introducció al curs
A tenir en compte
- A Gnuplot de per si es poden declarar variables funcions i generar gràfics a partir d’aquestes, però nosaltres quasi no ho utilitzarem. En general totes les gràfiques que crearem seran a partir de fitxers de dades (que haurem generat des d’un programa Fortran).
- Per programar utilitzarem l’editor Visual Studio Code juntament amb algunes extensions. Podeu aprendre a instal·lar Fortran, Gnuplot i descarregar el VSCode i algunes extensions útils en la següent guia:
Sobre aquest curs
- El curs és exclusivament sobre el llenguatge Gnuplot, el qual és de codi obert.
- L’objectiu és que juntament amb el curs de Fortran es pugui adquirir una base de programació sòlida per enfocar les pràctiques de l’assignatura.
- El curs comença amb les idees bàsiques, segueix amb personalització d’estils i després va sobre altres funcions gràfiques avançades de Gnuplot. Al final teniu un llistat d’abreviacions a l’estil
ps↔pointsize.
Resum de tota la sintaxis
En el següent programa d’exemple hi podeu trobar tota la sintaxis bàsica que es necessitaria per aprendre Gnuplot ràpidament
Pendent de fer...
Fitxer:
[sintaxi.gnu]
Codi:
file = "data/P7-24-25-res.dat" set term png enhanced size 1200, 800 font "Verdana, 18" set out "out/27-24-25-fig4.png" set title "Posició angular d'un pèndol simple - Transició" set xlabel "t (s)" set ylabel "phi (rad)" # Escala logarítmica # set logscale y # set logscale x # set format y "10^{%L}" # Estil de la llegenda set key right top set key box opaque # lt -1 lw 1 # set key outside # set key center below # set key spacing 1.75" # Marcar els eixos x=0 i y=0 set xzeroaxis set yzeroaxis # Graella i eixos # set grid xtics # set grid ytics # set mxtics 10 # set mytics 10 # Marges # set lmargin at screen 0.15 # set rmargin at screen 0.9 # set bmargin at screen 0.20 # set tmargin at screen 0.9 # Rang mostrat # set xrange[0:0.7] # set yrange[0:0.1] # Variables # pi = 4.*atan(1.) # Funcions # f(x) = 2.*pi*x plot \ file i 3 u 1:2 t'(+) phi' lt rgb "blue" pt 7 ps 1.2 lw 2, \ file i 3 u 1:3 t'(+) v_{phi}' lt rgb "#34e1eb" pt 7 ps 1.2 lw 2, \ file i 3 u 1:4 t'(-) phi' lt rgb "red" pt 7 ps 1.2 lw 2, \ file i 3 u 1:5 t'(-) v_{phi}' lt rgb "#f07375" pt 7 ps 1.2 lw 2
Galeria d’exemples
Oficial
Pròpia
És només una demo, cal afegir més exemples i realment útils per l’assignatura. Afegir que es pugui posar un fitxer de dades com a input. Afegir que es pugui guardar el gràfic com a SVG o com a PNG. Afegir una subpàgina amb un formulari perquè qualsevol pugui afegir exemples a la galeria. Afegir també support per gràfics animats (GIFs). Quan tingui temps ho faig.
Idees bàsiques de Gnuplot
Format bàsic
set term png set out 'fig1.png' set title "Funcio y(x)" set xlabel "x (m)" set ylabel "y (m)"
Gràfic d’una funció
plot 3.*x**2
O per més claredat…
f(x) = 3.*x**2 plot f(x)
Gràfic a partir d’un fitxer de dades
plot "P7-24-25-res.dat" index 0 using 1:2 title "y(x)"
O simplificant la sintaxis…
file = "P7-24-25-res.dat" plot file i 0 u 1:2 t"y(x)"
Com funciona un fitxer de dades
# x | y 1 1 2 4 3 9 4 16 5 25 # t | g(t) | error -11.828571428571429 1.46242813210322202E-003 6.53853759026351458E-004 -11.485714285714286 1.46242813210322202E-003 6.53853759026351458E-004
- En primer lloc, tenim blocs de dades (separats per dues línies en blanc), el primer bloc es correspon a
index 0, el segon bloc aindex 1, i així successivament.
- En segon lloc cada bloc de dades té diverses columnes. Si volem graficar la columna 1 com l’eix x i la columna 2 com l’eix y farem
using 1:2.
- Per últim els fitxers de dades poden tenir comentaris ( línies començades per
#). Aquestes són ignorades pel gnuplot.
Gràfic amb barres d’error
using 1:2:3 with yerrorbars
També podem fer barres d’error sols en l’eix x, o en els dos eixos.
using 1:2:3:4 with xyerrorbars
Operacions amb dades d’una columna
Podem re-escalar les dades o fer operacions similars utilitzant
$ i parèntesis al llarg de l’operació. using 1:(3.*($2)**2)
El
$2 fa referència als valors de la columna 2.Definició de constants
Podem definir constants en el propi gnuplot
pi = 4.*atan(1.) L = 3.
I utilitzar-les després, en funcions o en operacions amb dades
f(x) = 2.*pi*x plot f(x)
Encara que sigui sense definir la funció…
plot (5./(324.*L))*((x/L)**2)*(9.-(x/L)**2)
I també les podem utilitzar al operar amb dades
using 1:(2.*pi*$2)
Claredat al graficar
Si volem fer un salt de línia per claredat visual del codi, haurem d’utilitzar
\:plot \ file i 3 u 1:2 t'(+) phi' lt rgb "blue" pt 7 ps 1.2 lw 2, \ file i 3 u 1:3 t'(+) v_{phi}' lt rgb "#34e1eb" pt 7 ps 1.2 lw 2, \ file i 3 u 1:4 t'(-) phi' lt rgb "red" pt 7 ps 1.2 lw 2, \ file i 3 u 1:5 t'(-) v_{phi}' lt rgb "#f07375" pt 7 ps 1.2 lw 2
Personalització general del gràfic
Llegenda
set key right top set key box opaque
Opcions: (left | center | right) i (top / center / bottom)
Altres
set key box opaque # lt -1 lw 1 set key spacing 1.75 # --- Inside --- # set key right bottom # --- Outside --- set key outside set key center below # per defecte és 'center above'
set key box lt -1 lw 1 # El lt -1 i el lw 1 pinten be set key spacing 1.5 R # Interlineat #set key at 0.1, 0.9 # Especificar coordenades llegenda
Label i title
#set label 1 "bla bla " at screen 0.5,0.69 center font "Helvetica, 24" set title "Evolució temporal de l'energia" #set title font "Arial, 16" #set label "............." at screen 0.35, 0.83 font "Arial,18"
Marges
set margins -1, -1, 5, -1 # (left, right, bottom, top) # -1 = auto
Graella
No sé pas què fa això…
#Treu borde de dalt i dret. La resta els fa grisos. set style line 11 lc rgb '#808080' lt 1 set border 4095 back ls 11 set tics nomirror #Defineix la graella, també grisa set style line 12 lc rgb '#808080' lt 0 lw 1 set grid back ls 12
Eixos
# Marcar els eixos x = 0 i y = 0 set xzeroaxis set yzeroaxis # Graella i eixos # set grid xtics # set grid ytics # set mxtics 10 # set mytics 10
Escala logarítmica
# Escala logarítmica set logscale y set logscale x set format y "10^{%L}"
Rang visible
# Rang mostrat set xrange[0:7] set yrange[0:10]
Personalització i estils al graficar
Al final de la pàgina hi ha un llistat d’abreviacions amb el seu significat.
Ex:
ps ↔ pointsize.Tipus de gràfic
Després del
using 1:2 ve el tipus de gràfic que utilitzarem. Les opcions més comunes són:with points
with lines
with linepoints
Colors, mida, forma i estil dels punts i línies
Aquestes punts o línies es poden personalitzar després del
title utilitzant diferents paraules clau.Estil de les línies
dashtype 1 # línia normal dasthype 2 # línia discontínua dashtype 3 # línia de puntets
Forma dels punts
Colors
Podem utilitzar colors per defecte, o colors RGB personalitzats.
linetype rgb "blue" linetype rgb "red" linetype rgb "#e349e6"
TIP: Escriu a Google ‘color picker’ per escollir el color que vols i copiar-ne el codi hexadecimal.
Definir estils propis
Es poden definir estils propis i després utilitzar-los amb
linestyle al fer el plot.set style line 1 lt 2 lc rgb "red" lw 3 set style line 2 lt 2 lc rgb "orange" lw 2 set style line 3 lt 2 lc rgb "yellow" lw 3 set style line 4 lt 2 lc rgb "green" lw 2 plot cos(x) ls 1 title 'ls 1', \ cos(x-.2) ls 2 title 'ls 2',\ cos(x-.4) ls 3 title 'ls 3',\ cos(x-.6) ls 4 title 'ls 4'
Blocs de dades
Els fitxers de dades s’estructuren de la següent manera:
index > bloc > fila > columna
Fitxer de dades d’exemple (matriu)
# Index 0 2502 241.02911499078661 2503 241.02817555934743 2504 241.02723939972230 2505 241.02630649913303 2506 241.02537684761324 # Index 1 --> x | y | T(x,y) # # Bloc 0 --> x = 0 0.0000000000000000 0.0000000000000000 0.0000000000000000 # y = 0 0.0000000000000000 1.0000000000000000 0.0000000000000000 # y = 1 0.0000000000000000 2.0000000000000000 0.0000000000000000 # y = 2 0.0000000000000000 3.0000000000000000 0.0000000000000000 # ... # Bloc 1 --> x = 1 1.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000000 1.0000000000000000 1.1887676303041110 1.0000000000000000 2.0000000000000000 2.3788349244051896 1.0000000000000000 3.0000000000000000 3.5716771407714778 # Bloc 2 --> x = 2 2.0000000000000000 0.0000000000000000 0.0000000000000000 2.0000000000000000 1.0000000000000000 2.3762043320238777 2.0000000000000000 2.0000000000000000 4.7548444542597172 2.0000000000000000 3.0000000000000000 7.1387209940757081 # Index 2 1 20.162587731224061 2 24.812832173920334 3 28.968594432334669 4 32.882967385216986 # Index 3...
Fitxer de dades d’exemple (evolució temporal)
# Index 0 2502 241.02911499078661 2503 241.02817555934743 2504 241.02723939972230 2505 241.02630649913303 2506 241.02537684761324 # Index 1 --> x | y | T(x,y) # # Bloc 0 --> t = 0 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000000 0.0000000000000000 0.0000000000000000 2.0000000000000000 0.0000000000000000 0.0000000000000000 3.0000000000000000 0.0000000000000000 1.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000000 1.0000000000000000 1.1887676303041110 1.0000000000000000 2.0000000000000000 2.3788349244051896 1.0000000000000000 3.0000000000000000 3.5716771407714778 2.0000000000000000 0.0000000000000000 0.0000000000000000 2.0000000000000000 1.0000000000000000 2.3762043320238777 2.0000000000000000 2.0000000000000000 4.7548444542597172 2.0000000000000000 3.0000000000000000 7.1387209940757081 # Bloc 1 --> t = 0.1s 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000000 0.0000000000000000 0.0000000000000000 2.0000000000000000 0.0000000000000000 0.0000000000000000 3.0000000000000000 0.0000000000000000 1.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000000 1.0000000000000000 1.1887676303041110 1.0000000000000000 2.0000000000000000 2.3788349244051896 1.0000000000000000 3.0000000000000000 3.5716771407714778 2.0000000000000000 0.0000000000000000 0.0000000000000000 2.0000000000000000 1.0000000000000000 2.3762043320238777 2.0000000000000000 2.0000000000000000 4.7548444542597172 2.0000000000000000 3.0000000000000000 7.1387209940757081 # Bloc 2 --> t = 0.2s 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000000 0.0000000000000000 0.0000000000000000 2.0000000000000000 0.0000000000000000 0.0000000000000000 3.0000000000000000 0.0000000000000000 1.0000000000000000 0.0000000000000000 0.0000000000000000 1.0000000000000000 1.0000000000000000 1.1887676303041110 1.0000000000000000 2.0000000000000000 2.3788349244051896 1.0000000000000000 3.0000000000000000 3.5716771407714778 2.0000000000000000 0.0000000000000000 0.0000000000000000 2.0000000000000000 1.0000000000000000 2.3762043320238777 2.0000000000000000 2.0000000000000000 4.7548444542597172 2.0000000000000000 3.0000000000000000 7.1387209940757081 # Index 2 1 20.162587731224061 2 24.812832173920334 3 28.968594432334669 4 32.882967385216986 # Index 3...
- Entre
index 0iindex 1hi han dues línies en blanc.
- Entre
bloc 0ibloc 1hi ha una línia en blanc
- Entre files només hi ha un salt de línia. Les files es consideren punts (
points).
- Entre columnes hi ha com a mínim 1 espai (també n’hi poden haver 2, 3, 4… un tabulador, etc. però mínim 1). Les columnes són
variables. Els punts (files) es corresponen (en 2D) a les dues (en 3D a les 3) columnes escollides ambusing.
En general no utilitzem blocs, excepte quan treballem amb matrius o evolucions temporals.
- Per exemple si volem guardar una evolució temporal, farem que cada bloc (1 línia en blanc de separació) sigui un interval de temps diferent.
De manera que cada fila serà un punt (a graficar), i tindrem en un sol bloc tots els punts que volem graficar, però aquests punts aniran canviant les seves posicions en el gràfic al avançar el temps (és a dir al iterar per cada bloc).
- En canvi si volem crear una matriu finita (malla), en què un espai 2D queda definit per un nombre discret de punts. Ens convindrà que cada bloc sigui tingui un mateix valor de x_i, mentre que dins d’un bloc cada fila es correspongui a un valor y_j diferent.
D’aquesta manera cada fila és un punt, però els punts s’agrupen per blocs (i cada bloc és una columna diferent de la malla).
A partir d’aquestes dades podem fer per exemple gràfics animats o gràfics 3D.
Gràfics 3D
Com veurem més endavant, podem fer gràfics 3D amb
splot i using 1:2:3 tenint a la primera columna els valors de x, a la segona y i a la tercera z=f(x,y).Nota: si ho combinem amb with yerrorbars la tercera columna són els errors, però si ho combinem amb splot, la tercera columna és l’eix z.
De manera que el primer que fem és triar per exemple
index 0, seguit de les columnes que utilitzarem per el gràfic (using 1:2:3) i el propi splot ja reconeixerà que les dades s’estructuren en blocs.Evolució temporal
Per graficar l’evolució temporal utilitzarem gràfics animats tal com està explica’t en el següent apartat.
Utilitzar every correctament
Les dades estan agrupades en primer lloc per seccions, ens referim a elles amb
index. (Per exemple index 0). A dins una mateixa secció les dades estan estructurades per blocs i per files.Normalment utilitzem tots els blocs i totes les files així que no solem indicar res, però aquest cop sí ens interessa triar quines files i blocs volem utilitzar, ho farem gràcies a
every. Finalment dins d’una mateixa fila triem quines columnes utilitzar amb using. (Per exemple
using 1:3).La sintaxis de
every a mi em va costar bastant d’entendre al principi així que intentaré explicar-la detalladament.De per si hi han 6 paràmetres, separats per dos punts (
:). Nota: Aquests dos punts no tenen res a veure amb selectors ni arrays (estil python o similar), simplement són separadors entre arguments.
every cadaKfiles:cadaJblocs:desdeFilaN:desdeBlocM:finsFilaP:finsBlocQ
Aquests 6 arguments són números enters que ens permeten triar quines files i blocs agafem. Tal com el seu nom indica serveixen per indicar l’inici, pas i final d’una fila o d’un bloc.
Nota: són noms escollits per mi per claredat (els oficials de la documentació de gnuplot dificulten la comprensió).
Tots els arguments que no posem (deixem en blanc) prendran el seu valor per defecte (inici=1, pas=1, final=n_ultim).
Ja que normalment quan utilitzem
every és perquè volem fer un gràfic animat d’una evolució temporal, haurem de tenir molt en compte si l’evolució temporal ve marcada pels grups (i les files són elements), o si l’evolució temporal ve marcada per les files (i cada grup és un element).Suposem com a exemple dues partícules que es mouen pel pla cartesià.
Grups com a evolució temporal
Cada fila serà una partícula (posicio x | posicio y | possible variable f(x,y) representada com a color). I cada bloc serà un interval de temps (t=0 per primer, t=0.1s per segon, etc.).
Així doncs quan estiguem en la iteració
i, sempre ens estarem centrant en el bloc i. Per veure com es mouen les partícules haurem d’utilitzar doncs una cosa similar a:
every :::i::i
I si no només volem mostrar la seva posició actual sinó deixar marcat el camí (la trajectòria que va seguint) ens interessarà mostrar la línia del seu recorregut temporal, és a dir a cada frame, és a dir graficar també totes les posicions anteriors. Això ho farem fent:
every :::1::i
Files com a evolució temporal
Si en canvi les dades es corresponen a l’evolució temporal per files (cada grup és una partícula diferent i cada fila un valor diferent de temps), tindrem que per mostrar l’evolució de la partícula haurem de graficar a cada iteració la corresponent fila
i.A priori la nostra lògica ens diria que hauríem de fer el següent:
every ::i::i:
I si volem mostrar la trajectòria (és a dir els frames anteriors):
every ::1::i:
I el nostre raonament és correcte, ara bé.
Cal anar amb molt de compte al veure alguns exemples, ja que la sintaxis té paràmetres opcionals que es poden ometre. Aquests sempre s’ometen de dreta a esquerra, de manera que si falten arguments significa que hi ha alguns:implícits al final.
De fet per ser precisos, tenir
: a la dreta pe gnuplot és un error de sintaxis (no ho sap gestionar). Així doncs no és només que every ::i::i sigui equivalent a every ::i::i:, sinó que de fet every ::i::i: és incorrecte i la versió que accepta gnuplot és every ::i::i.En altres paraules, pensem la sintaxis de
every considerant que hi ha 6 arguments, però després eliminem els : que ens sobrin a la dreta. Ah, i si enlloc de mostrar totes les partícules volem mostrar-ne sols una (per exemple mostrar la posició en temps real de la partícula 1) faríem:
every ::i:1:i:1
Gràfics animats
Primer exemple
Anem a explicar com fer gràfics animats, considerem el següent exemple senzill:
set term gif size 800,600 animate delay 10 loop 0 set output "sine_wave.gif" set xrange [0:10] set yrange [-1:1] set xlabel "x" set ylabel "sin(x)" set grid do for [k=0:100:1] { phase = k * 0.1 plot sin(x + phase) with lines title "Funcio sin(x) animada" }
Resultat

Anem a veure què estem fent aquí.
- Primer de tot cal definir el gràfic com a GIF
size 800, 600vol dir 800 pixels d’amplada i 600 d’alçadaanimate delay 10vol dir que el GIF tindrà 10 frames per segonloop 0vol dir que s’executi en bucle indefinidament
set term gif size 800,600 animate delay 10 loop 0 set output "animacio1.gif"
Aquesta part és equivalent a la típica de
set term png i set output 'fig1.png'.- A continuació tenim tot el que trobaríem en un gràfic normal (definició d’estils, de rang, llegenda, etc.)
- Finalment tenim un bucle que itera per cada frame i fa el ‘plot’
Cal tenir en compte que el GIF durarà en funció de les iteracions i el animation delay definit (pel nostre cas 100 iteracions / 10 fps = 10 segons).
El que fem és anar iterant frame a frame i fem un plot (generem una imatge), ja que en realitat un GIF és això, una seqüència de PNGs.
Normalment iteraríem entre les dades del nostre fitxer de dades però en aquest exemple ho fem utilitzant la funció intrínseca
sin(x).A partir d’una fitxer de dades
Ara el que hem de tenir en compte és que entre el
index i el using hem de posar quines línies i blocs utilitzarem per fer el plot utilitzant la paraula clau every.plot file index 1 every ::1::i: using 1:5 (...)
La sintaxis completa de
every l’acabem d’explicar aquí.Títol dinàmic
Si ara volguéssim text dinàmic, per exemple que mostri la fase en la llegenda, hauríem de prendre el número que volem mostrar (phase) i convertir-lo a cadena de text. Aquesta conversió la fem amb
sprintf. Per exemple per convertir la nostra fase a número real amb mostrant una xifra decimal faríem:
sprintf("%.1f", phase)
Quan volem concatenar cadenes a gnuplot utilitzem un punt (
.). De manera que per exemple podríem fer:title "Fase = ".sprintf("%.1f", phase)." rad"
Resultat

O alternativament
title sprintf("Fase = %.1f rad", phase), que és el mateix però escrit d’una manera més neta.Per mostrar l’evolució temporal
Una de les utilitats d’un gràfic animat és veure l’evolució temporal del sistema, per exemple mostrant el perfil de temperatures d’una barra.

Fitxer de dades
Script gnuplot
set term gif size 1000,600 animate delay 10 loop 0 optimize set output "out/5_Animacio1.gif" delta_temps = 15. set style line 1 lc rgb '#8b1a0e' pt 1 ps 1 lt 1 lw 3 # --- red set style line 2 lc rgb '#5e9c36' pt 2 ps 1 lt 2 lw 3 # --- green set style line 3 lc rgb '#1c6ee8' pt 3 ps 1 lt 3 lw 3 # --- blue set style line 4 lc rgb '#ffa500' pt 3 ps 1 lt 4 lw 3 # --- orange set style line 5 lc rgb '#9370DB' pt 5 ps 1 lt 5 lw 3 # --- purple set style line 6 lc rgb '#FA8072' pt 6 ps 1 lt 6 lw 3 # --- salmon set style line 7 lc rgb '#738EFA' pt 7 ps 1 lt 7 lw 3 # --- light blue set style line 8 lc rgb '#FA7373' pt 1 ps 1 lt 8 lw 3 # --- light red set style line 9 lc rgb '#73FA7C' pt 9 ps 1 lt 9 lw 3 # --- light green # leeremos el numero de bloques de manera automatica datafile ="evolucio_tota_barra.dat" #estacionari = "FerroEST.dat" stats datafile numblo=STATS_blocks # pone el titulo set title "Fig5: T(x,t)" # fijamos los rangos del canvas, para que no se reajusten set xrange[0:1.5] set yrange[0:280] #fijamos los títulos set xlabel "x(m)" set ylabel "T (ºC)" #bucle do for[i=0:numblo-2:1]{ #escribe la etiqueta del tiempo set label 2 sprintf('Temps: %9.3f (s)',i*delta_temps) at 0.8,160 right font 'Verdana,12' #dibuja plot datafile index i u 2:3 w l ls 1 t"T(x,t)",datafile index 0 u 2:3 t"T_0(x)" w l ls 3 #, estacionari u 1:2 t"T_est(x)" w l ls 2 #borra la etiqueta unset label 2 }
Combinara-ho amb multiplot
Com a opció avançada, podem utilitzar gràfics animats juntament amb multiplot.
set term gif size 1000,600 animate delay 7 loop 0 set output "out/animatransis.gif" cartesianPosition ="data/pendolnegatiu.dat" angularData= "data/apt2.dat" set style line 1 lc rgb '#8b1a0e' pt 1 ps 1 lt 1 lw 1 # --- red do for[k=1:10000:30]{ set multiplot title "Evolució del pèndol en funció del temps" # Plot 1 set size 1.,0.9 set origin 0.,0. set xrange[-5:5] set yrange[-10:10] set xlabel "φ (rad)" set ylabel "φ' (rad/s)" # ploteja des del primer fins el i amb una linea plot angularData i 3 every ::1::k u 2:3 with line ls 1 t"" , angularData i 3 every ::k::k u 2:3 t"" ps 3 # Plot 2 set size 0.3, 0.3 # fem una caixeta set origin 0.7, 0.5 # la posem a dalt a la dreta set xrange[-1:1] set yrange[-1:1] set xlabel "x (m)" set ylabel "y (m)" unset title plot cartesianPosition every ::k::k u 2:3 t"" ps 3 # plotejem dins unset multiplot }
Optimize
Si volem podem posar
optimize per fer que el GIF estigui optimitzat (es perd una mica de qualitat però pesa menys MB).set term gif size 800,600 animate delay 10 loop 0 optimize
Llegenda ben posada
set key tmargin center set key horizontal set key at graph 0.5, 1.07
Gràfics 3D
Per fer un gràfic 3D només ho hem de mantenir tot igual, i al final però hem de fer el plot amb
splot enlloc de plot, i utilitzant triant un tipus gràfic (points, lines, pm3d...)Per exemple:
splot file index 0 using 1:2:3 with pm3d t"Mapa de temperatures - Sense fonts"
Ens permet poder obtenir un gràfic a l’estil:

Dades utilitzades per aquest gràfic
Script gnuplot per generar aquest gràfic
file = "data/mapa_temperatures.dat" set term png enhanced size 1200, 800 font "Verdana, 18" set out "out/Mapa_Sense_Fonts.png" set title "Mapa de Temperatures final (estat estacionari)" set xlabel "x (cm)" set ylabel "y (cm)" # Llegenda set key right top set key box opaque # Marcar els eixos x=0 i y=0 set xzeroaxis set yzeroaxis # Rang mostrat # set xrange[0:32.5] # set yrange[0:16.5] unset ztics splot file index 0 using 1:2:3 with pm3d t"Mapa de temperatures - Sense fonts"
Si volem canviar la vista del gràfic ho fem amb
set view.# Vista 3D (angle zenital, angle azimutal, escala grafic, escala eix z) set view 45, 45, 0.8, 1.2
També podem fer una vista zenital simplement amb:
set view map
Si volem fer-ho amb altres opcions que no siguin ‘pm3d’ també podem.
points

lines

linespoints

surface

dots

pm3d

Dades manuals o a partir de funcions (’-’, ‘+’ i ‘++’)
Posar les dades directament dins el gnuplot
plot '-' using 1:2:3 with yerrorlines title "dades de prova" 1 10 1.2 2 15 0.8 3 20 1.5 4 18 1.0 e
Generar dades a partir de funcions
Per defecte gnuplot utilitza
samples = 100 al graficar funcions, però això es pot modificar.set samples 20 plot '+' using 1:(sin($1)) with lines title "sin(x)"
També podem d’aquesta manera graficar errors com a funcions analítiques
set samples 50 plot \ '+' using 1:(sin($1)):(0.1*abs(sin($1))) with yerrorbars title "sin(x) ±10%", \ sin(x) with lines title "sin(x)"
Definir el zero, Encoding i altres funcions avançades
Definir el zero
set zero 1.e-20 # Agafa com zero quantitats inferiors
Encoding
set encoding iso_8859_15 # Permet l'ús d'accents als MAS set encoding iso_8859_1 # Permet l'ús d'accents als PC's set encoding CP1250 # Permet l'ús d'accents als MS-Windows set locale "es_ES.utf8"
Altres
Histogrames
Opacitat
Si no volem que el gràfic s’amagui a si mateix podem utilitzar:
set style fill transparent solid 0.65 border
Replot
Podem fer dos gràfics en un mateix fitxer gnu, per exemple:
[el nostre codi que genera un gràfic] set style fill transparent solid 0.5 noborder set title "El mateix però ara amb transparència" replot
Ús de latex i Markdown
# set terminal pngcairo transparent enhanced fontscale 1.0 size 600, 400 # set output 'enhanced_utf8.1.png' set format x "%.1f" set format y "%.1f" set key title " " enhanced center set label 1 "Superscripts and subscripts:" at -0.650000, 0.950000, 0.00000 left norotate back textcolor rgb "#56b4e9" nopoint set label 3 "A_{j,k} 10^{-2} x@^2_k x@_0^{-3/2}y" at -0.550000, 0.850000, 0.00000 left norotate back nopoint set label 5 "Space-holders:" at -0.550000, 0.700000, 0.00000 left norotate back textcolor rgb "#56b4e9" nopoint set label 6 "<&{{/=20 B}ig}> <&{x@_0^{-3/2}y}> holds space for" at -0.450000, 0.600000, 0.00000 left norotate back nopoint set label 7 "<{{/=20 B}ig}> <{x@_0^{-3/2}y}>" at -0.450000, 0.500000, 0.00000 left norotate back nopoint set label 8 "Overprint\n(v should be centred over d)" at -0.900000, -0.200000, 0.00000 left norotate back textcolor rgb "#56b4e9" nopoint set label 9 " ~{abcdefg}{0.8v}" at -0.850000, -0.400000, 0.00000 left norotate back nopoint set label 10 "UTF-8 encoding does not require Symbol font:" at -0.400000, 0.350000, 0.00000 left norotate back textcolor rgb "#56b4e9" nopoint set label 11 "{/*1.5 ∫@_{/=9.6 0}^{/=12 ∞}} {e^{-{μ}^2/2} d}{μ=(π/2)^{1/2}}" at -0.300000, 0.200000, 0.00000 left norotate back nopoint set label 21 "Left ^{centered} ƒ(αβγδεζ)" at 0.500000, -0.100000, 0.00000 left norotate back nopoint set label 22 "Right ^{centered} ƒ(αβγδεζ)" at 0.500000, -0.200000, 0.00000 right norotate back nopoint set label 23 "Center^{centered} ƒ(αβγδεζ)" at 0.500000, -0.300000, 0.00000 center norotate back nopoint set label 30 "{/:Bold Bold} and {/:Italic Italic} markup" at -0.900000, 0.00000, 0.00000 left norotate back nopoint set arrow 1 from 0.500000, -0.500000, 0.00000 to 0.500000, 0.00000, 0.00000 nohead back nofilled linewidth 1.000 dashtype solid set style data lines set title "Demo of enhanced text mode using a single UTF-8 encoded font\nThere is another demo that shows how to use a separate Symbol font" set xrange [ -1.00000 : 1.00000 ] noreverse set yrange [ -0.500000 : 1.10000 ] noreverse NO_ANIMATION = 1 save_encoding = "utf8" plot sin(x)**2 lt 2 lw 2 title "sin^2(x)"
Splines
Curve de Bezier com a interpolació entre punts
Llistat d’abreviacions
A continuació un llistat de les principals abreviacions amb el seu significat
Bàsiques
i
u
t
w
err
index
using
title
with
errorbars
Línies
ls
lt
lc
dt
lw
linestyle
linetype
linecolor
dashtype
linewidth
Punts
pt
ps
pointtype
pointsize
Altres
fs
fc
ax
pal
cb
bl
xr
yr
xt
yt
vi
fillstyle
fillcolore
axes
palette
colorbox
baseline
xrange
yrange
xtics
ytics
view
Implícits
out
term
log
rgb
output
terminal
logscale
rgbcolor
