Come aggiungere dati di curve 2D non monotoni sulla mappa pm3d con gnuplot
Vorrei usare splot e aggiungere una curva 2D sulla mia mappa pm3d. Quindi uso questo codice che quasi funziona.
Ho un problema con la linea 2D.
splot 'gnu8' u 2:1:3 w pm3d notitle,\
'' u 2:(-$1):3 w pm3d notitle,\ 'allaxi80.005.dat' u 2:1:0 w l lw 3 lc "black" notitle,\ '' u 2:(-$1):0 w l lw 3 lc "black" notitle
Questa è la mia linea 2D. Quando uso la trama non ho alcun problema.
gnuplot> plot 'allaxi80.005.dat' u 2:1 w l, '' u 2:(-$1) w l

E ora voglio la stessa cosa con splot ma come puoi vedere ottengo una curva diversa.
gnuplot> splot 'allaxi80.005.dat' u 2:1:0 w l lw 3 lc "black" notitle,\
> '' u 2:(-$1):0 w l lw 3 lc "black" notitle

Quindi disattivo la visualizzazione della mappa sapendo che i miei dati sono 2D.
unset view
E ho capito:

Io uso :
G N U P L O T
Version 5.2 patchlevel 2
Una parte del mio file di dati:
0 32.0109
0.3125 32.0379
0.3125 32.0376
0.625 32.119
0.625 32.1221
0.78125 32.1835
0.78125 32.1837
0.788924 32.1875
0.790724 32.1875
0.9375 32.2602
0.9375 32.26
0.947399 32.2656
0.945217 32.2656
1.01562 32.3064
1.01562 32.3066
1.07344 32.3438
1.07505 32.3438
1.09375 32.3552
1.09375 32.3554
1.25 32.4697
1.25 32.4708
1.28557 32.5
1.287 32.5
1.40625 32.6034
1.40625 32.6065
1.45767 32.6562
1.46141 32.6562
1.5625 32.7658
1.5625 32.7667
1.60196 32.8125
1.60243 32.8125
1.64062 32.8601
1.64062 32.8613
1.66339 32.8906
1.66505 32.8906
1.71875 32.9636
1.71875 32.9672
1.71984 32.9688
1.7216 32.9688
1.77482 33.0469
1.77503 33.0469
1.79688 33.0805
1.79688 33.0813
1.82527 33.125
1.82647 33.125
1.875 33.2065
1.875 33.2084
1.91838 33.2812
1.91899 33.2812
2.00165 33.4375
2.00201 33.4375
2.03125 33.5005
2.03125 33.5023
2.07369 33.5938
2.07384 33.5938
2.13673 33.75
2.13802 33.75
2.1875 33.9013
2.1875 33.9033
2.18852 33.9062
2.18935 33.9062
2.23597 34.0625
2.23618 34.0625
2.27742 34.2188
2.2774 34.2188
2.31287 34.375
2.3128 34.375
2.34271 34.5312
2.3428 34.5312
2.34375 34.5373
2.34375 34.5384
2.36727 34.6875
2.36713 34.6875
2.38697 34.8438
2.38683 34.8438
2.40246 35
2.40242 35
2.41423 35.1562
2.41422 35.1562
2.42229 35.3125
2.42226 35.3125
2.42668 35.4688
2.42665 35.4688
2.42753 35.625
2.42754 35.625
2.42493 35.7812
2.42491 35.7812
2.41881 35.9375
Il mio intero file:
https://github.com/Suntoryy/gnuplot/blob/master/allaxi80.005.dat
Risposte
In realtà, i dati sono sempre utili, perché dopo aver tracciato i tuoi dati ho visto cosa c'è che non va. Con il tuo codice prende la pseudocolonna 0 come coordinata z, che è fondamentalmente il numero di riga che inizia da zero. Controlla help pseudocolumns
.
Il tuo codice dovrebbe essere letto in questo modo. Ricorda 0
in (0)
, che significa valore costante di 0
(non numero di riga).
splot 'allaxi80.005.dat' u 2:1:(0) w l lw 3 lc "black" notitle, \
'' u 2:(-$1):(0) w l lw 3 lc "black" notitle
Aggiunta: (dopo aver esaminato i dati completi in modo più dettagliato)
Ecco un esempio minimo del tuo problema.
- i tuoi dati non sono monotoni nella colonna 2 (qui colonna 1)
- non lo vedrai con
plot
perché dopo ogni due righe di dati c'è una riga vuota. Quindi, le linee non saranno collegate. Masplot
collegherà i datapoint se c'è una singola riga vuota.
Hai le opzioni:
- ordina i tuoi dati in base alla colonna che rappresenta la tua x
o
- invece di una riga vuota aggiungi due righe vuote, quindi funzionerà anche con
splot
.
Codice: (modifica: dati più simili ai tuoi dati)
### plot and splot with non monotonic data
reset session
$Data0 <<EOD
0 0
2 1
6.3 2.3
7 0
1.1 0.9
4 2
3.9 2.3
6 2
EOD
$Data1 <<EOD 0 0 2 1 6.3 2.3 7 0 1.1 0.9 4 2 3.9 2.3 6 2 EOD $Data2 <<EOD
0 0
2 1
6.3 2.3
7 0
1.1 0.9
4 2
3.9 2.3
6 2
EOD
set offsets 1,1,1,1
set multiplot layout 2,3
plot $Data0 u 1:2 w lp pt 7 ti "0 empty lines" plot $Data1 u 1:2 w lp pt 7 ti "1 empty lines"
plot $Data2 u 1:2 w lp pt 7 ti "2 empty lines" splot $Data0 u 1:2:(0) w lp pt 7 ti "0 empty lines"
splot $Data1 u 1:2:(0) w lp pt 7 ti "1 empty lines" splot $Data2 u 1:2:(0) w lp pt 7 ti "2 empty lines"
unset multiplot
### end of code
Risultato:

Per ordinare la prima funzione delle colonne alle seconde colonne in gnuplot basta fare:
splot '< sort -u -k1,1 file.dat | sort -k2,2'