2017-09-24 2 views
0

En gnuplot, vous pouvez créer un histogramme commebacs Centrés sur Gnuplot Histogramme

binwidth=#whatever# 
set boxwidth binwidth 
bin(x,width)=width*floor(x/width)+binwidth/2.0 
plot "gaussian.data" u (bin($1,binwidth)):(1.0/10000) smooth freq w boxes 

Actuellement, mes bacs semblent être centrés sur le bord droit. C'est-à-dire que la case correspondant à x = 0 a son bord droit au-dessus de zéro. J'aimerais que les bacs soient axés sur le centre. C'est-à-dire, je voudrais avoir le centre de chaque bin au-dessus des valeurs x correspondantes. J'ai essayé de jouer avec les arguments de bin (x, width) mais n'ai pas réussi. Aucune suggestion?

Répondre

1
bin(x,width) = width*round(x/width) 

devrait faire l'affaire. Vous pouvez simplement visualiser comment l'binning fonctionne:

binwidth = 0.5 
round(x) = floor(x+0.5) 
bin(x,width) = width*round(x/width) 
set xrange [-2:2] 
set xlabel "x" 
set ylabel "bin position" 
set grid 
plot bin(x,binwidth) 

donne

enter image description here

Notez que les valeurs dans [-0.25,0.25] sont mis en correspondance avec le bac à la position 0, les valeurs [0,25, 0,75] sont mappés sur la corbeille à la position 0,5, et ainsi de suite.

+0

avez-vous défini votre propre 'round (x)'? – Ptheguy

+0

Je suppose que 'round (x) = x-floor (x) <0.5? plancher (x): plafond (x) '? – Ptheguy

+0

Vous avez raison; J'ai oublié la fonction "ronde". J'ai édité ma réponse pour ajouter 'round (x) = floor (x + 0.5)'. Désolé pour ça! – user8153