Domanda

Sto avendo questo file come data.dat:

Xstep Y1 Y2 Y3 Y4
332 1.22 0.00 0.00 1.43
336 5.95 12.03 6.11 10.41
340 81.05 81.82 81.92 81.05
394 11.76 6.16 10.46 5.87
398 0.00 0.00 1.51 1.25
1036 0.03 0.00 0.00 0.00

posso tracciare questi dati come istogramma con questo script, hist-v1.gplot (utilizzando set style data histogram):

set xlabel "X values"
set ylabel "Occurence"
set style data histogram
set style histogram cluster gap 1
set style fill solid border -1
set term png
set output 'hist-v1.png'
set boxwidth 0.9
# attempt to set xtics so they are positioned numerically on x axis:
set xtics ("332" 332, "336" 336, "340" 340, "394" 394, "398" 398, "1036" 1036)  
# ti col reads the first entry of the column, uses it as title name 
plot 'data.dat' using 2:xtic(1) ti col,  '' u 3 ti col, '' u 4 ti col, '' u 5 ti col

E chiamando:

gnuplot hist-v1.gplot && eog hist-v1.png

questa immagine è generata: image-Hist v1.png

Tuttavia, si può notare che l'asse X non viene ridimensionato numericamente - capisce i valori X come le categorie (vale a dire si tratta di un asse di categoria)

.

posso ottenere un asse X più numerica con il seguente script, hist-v2.gplot (utilizzando with boxes):

set xlabel "X values"
set ylabel "Occurence"
# in this case, histogram commands have no effect
set style data histogram
set style histogram cluster gap 1
set style fill solid border -1
set term png
set output 'hist-v2.png'
set boxwidth 0.9
set xr [330:400]
# here, setting xtics makes them positioned numerically on x axis:
set xtics ("332" 332, "336" 336, "340" 340, "394" 394, "398" 398, "1036" 1036)  
# 1:2 will ONLY work with proper xr; since we have x>300; xr[0:10] generates "points y value undefined"!
plot 'data.dat' using 1:2 ti col smooth frequency with boxes, '' u 1:3 ti col smooth frequency with boxes

E chiamando:

gnuplot hist-v2.gplot && eog hist-v2.png

questa immagine è generata: immagine Hist-v2.png http://img266.imageshack.us/img266/6717/ histv2.png

Purtroppo, le barre 'sovrapposizione' qui, quindi è difficile da leggere il grafico.

C'è un modo per mantenere l'asse X scala numerica come in hist-v2.png, ma mantenere lato disseminati bar a fianco con come in hist-v1.png? Questa discussione, " Re: Istogramma con asse x data errore " dice che non puoi:

  

Ma sarà difficile tirare la data coordinata x di file di dati, ...

ma poi, si riferisce a un problema differente ...

Grazie,

Cheers!

È stato utile?

Soluzione

Ok, dopo aver letto l'aiuto gnuplot per un po ', sembra che lo stile istogramma sarà '' sempre '' interpretare x asse come sequenziali immissioni / categorie - così effettivamente, sembra che ci sia alcun modo per ottenere un asse numerico con una stile istogramma.

Tuttavia, si scopre che $ può fare riferimento a una colonna, e questi possono essere utilizzati per effettivamente 'riposizionare' bar nel secondo (stile frequency with boxes) esempio; Quindi, con questo codice come hist-v2b.gplot:

set xlabel "X values"
set ylabel "Occurence"
set style fill solid border -1
set term png
set output 'hist-v2.png'
set boxwidth 0.9
set xr [330:400]
# here, setting xtics makes them positioned numerically on x axis:
set xtics ("332" 332, "336" 336, "340" 340, "394" 394, "398" 398, "1036" 1036)  
# 1:2 will ONLY work with proper xr; since we have x>300; xr[0:10] generates "points y value undefined"!
plot 'data.dat' using ($1-0.5):2 ti col smooth frequency with boxes, '' u ($1-0.25):3 ti col smooth frequency with boxes, '' u ($1+0.25):4 ti col smooth frequency with boxes, '' u ($1+0.5):5 ti col smooth frequency with boxes

E chiamando:

gnuplot hist-v2b.gplot && eog hist-v2b.png

questa immagine è generata: immagine Hist-v2b.png http://img823.imageshack.us/img823/805/ histv2b.png

... che è più o meno quello che volevo in primo luogo.

Solo una piccola nota - ho originariamente voluto usare lo script con i dati in linea; per una messa a punto come questo, avrebbe dovuto essere scritto come

plot '-' using ($1-0.5):2 ti col smooth frequency with boxes, '-' u ($1-0.25):3 ti col smooth frequency with boxes
Xstep Y1 Y2 Y3 Y4
332 1.22 0.00 0.00 1.43
336 5.95 12.03 6.11 10.41
340 81.05 81.82 81.92 81.05
394 11.76 6.16 10.46 5.87
398 0.00 0.00 1.51 1.25
1036 0.03 0.00 0.00 0.00
end
Xstep Y1 Y2 Y3 Y4
332 1.22 0.00 0.00 1.43
336 5.95 12.03 6.11 10.41
340 81.05 81.82 81.92 81.05
394 11.76 6.16 10.46 5.87
398 0.00 0.00 1.51 1.25
1036 0.03 0.00 0.00 0.00
end

... che è, i dati dovrebbe essere più volte inseriti, come viene in da stdin - questo problema è discusso in gnuplot - fare più trame da file di dati con built-in comandi .

Cheers!

PS: Come v'è un po 'di spazio sullo schema, sarebbe bello se potessimo in qualche modo specificare intervalli x-assi separati; che viene discusso in:

Altri suggerimenti

Impostazione della larghezza della scatola è propriamente molto importante quando si traccia un istogramma con "scatole" stili di stampa. In uno dei miei blog articolo ho parlato. Se dell'interesse, fai clic qui !

entrare descrizione dell'immagine qui

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top