Saltar al contenido

¿Histograma usando gnuplot?

Solución:

sí, y es rápido y sencillo aunque muy oculto:

binwidth=5
bin(x,width)=width*floor(x/width)

plot 'datafile' using (bin($1,binwidth)):(1.0) smooth freq with boxes

verificar help smooth freq para ver por qué lo anterior hace un histograma

para lidiar con rangos, simplemente establezca la variable xrange.

Tengo un par de correcciones / adiciones a la respuesta muy útil de Born2Smile:

  1. Los contenedores vacíos hicieron que la caja del contenedor adyacente se extendiera incorrectamente en su espacio; evitar esto usando set boxwidth binwidth
  2. En la versión de Born2Smile, los bins se representan como centrados en su límite inferior. Estrictamente, deben extenderse desde el límite inferior al límite superior. Esto se puede corregir modificando el bin función: bin(x,width)=width*floor(x/width) + width/2.0

Tenga mucho cuidado: todas las respuestas en esta página toman implícitamente la decisión de dónde comienza el binning (el borde izquierdo del bin más a la izquierda, si lo desea) fuera de las manos del usuario. Si el usuario está combinando cualquiera de estas funciones para agrupar datos con su propia decisión sobre dónde comienza la agrupación (como se hace en el blog que está vinculado anteriormente), las funciones anteriores son todas incorrectas. Con un punto de partida arbitrario para agrupar ‘Min’, la función correcta es:

bin(x) = width*(floor((x-Min)/width)+0.5) + Min

Puede ver por qué esto es correcto secuencialmente (ayuda dibujar algunos contenedores y un punto en algún lugar de uno de ellos). Reste Min de su punto de datos para ver qué tan lejos está el rango de agrupamiento. Luego, divida por binwidth para que esté trabajando eficazmente en unidades de ‘bins’. Luego ‘piso’ el resultado para ir al borde izquierdo de ese contenedor, agregue 0.5 para ir al medio del contenedor, multiplique por el ancho para que ya no esté trabajando en unidades de contenedores sino en una escala absoluta nuevamente, luego, finalmente, vuelva a agregar el desplazamiento mínimo que restó al principio.

Considere esta función en acción:

Min = 0.25 # where binning starts
Max = 2.25 # where binning ends
n = 2 # the number of bins
width = (Max-Min)/n # binwidth; evaluates to 1.0
bin(x) = width*(floor((x-Min)/width)+0.5) + Min

por ejemplo, el valor 1.1 realmente cae en el contenedor de la izquierda:

  • esta función lo asigna correctamente al centro del contenedor izquierdo (0,75);
  • La respuesta de Born2Smile, bin (x) = ancho * piso (x / ancho), lo asigna incorrectamente a 1;
  • La respuesta de mas90, bin (x) = width * floor (x / width) + binwidth / 2.0, lo asigna incorrectamente a 1.5.

La respuesta de Born2Smile solo es correcta si los límites del contenedor ocurren en (n + 0.5) * binwidth (donde n se ejecuta sobre números enteros). La respuesta de mas90 solo es correcta si los límites de bin ocurren en n * binwidth.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *