Editar:
Muy bien, entonces me respondió a mi propia pregunta, mediante la lectura de los mayores preguntas un poco más. Pido disculpas por la pregunta! Utilizando el código

Y = rand(10,1);
C = hist(Y);
C = C ./ sum(C);
bar(C)

con los correspondientes datos en lugar de los datos aleatorios funcionaba bien. Sólo necesita para optimizar el tamaño de un recipiente de ahora.

Buen día,
Ahora, yo sé que usted debe estar pensando que esto se ha pedido una y mil veces. En cierto modo, usted está probablemente en lo cierto, pero yo no podía encontrar la respuesta a mi pregunta específica de los posts que he encontrado por aquí, así que pensé que podría pedir. Voy a tratar de ser lo más claro posible, pero por favor, dime si no es evidente que lo que quiero hacer

Bien, así que tengo un (fila) vector con 5000 elementos, todos los cuales son sólo números enteros. Ahora lo que quiero hacer es trazar un histograma de estos 5000 elementos, pero de tal manera que el eje da la oportunidad de estar en ese determinado de reciclaje, mientras que el eje x está todavía regular, ya que en él le da el valor de la bandeja específica.

Ahora, lo que tenía sentido para mí fue normalizar todo, pero que no parece funcionar, al menos como yo lo estoy haciendo.

Mi primer intento fue

sums = sum(A);
hist(sums/trapz(sums),50)

Omití el resto, ya que las importaciones de una gran cantidad de datos a partir de un determinado archivo, que realmente no importa. sumas = suma(a) funciona bien, y puedo ver el vector en mi matlab cosita. (¿Qué debo llamarlo, consola?). Sin embargo, dividiendo por el área con trapz sólo cambia el eje x, no es mi eje. Todo lo que se pone súper pequeño, del orden de 10^-3, cuando debería ser del orden de 10.

Ahora mirando a su alrededor, alguien sugirió el uso de

hist(sums,50)
ylabels = get(gca, 'YTickLabel');
ylabels = linspace(0,1,length(ylabels));
set(gca,'YTickLabel',ylabels); 

Mientras esto sin duda hace que el eje va de 0 a 1, que no está normalizado en todos. Yo quiero que en realidad reflejan la probabilidad de estar en un cierto reciclaje. La combinación de los dos tampoco trabajo. Pido disculpas si la respuesta es muy obvia, yo simplemente no lo veo.

Edit: Aunque me doy cuenta de que esta es una nueva pregunta (que ha sido preguntado un millón de veces), pero el tamaño del bote me acaba de recoger con la mano hasta que se veía bien, como en ningún bares que faltan a partir del histograma. He visto varias secuencias de comandos que se supone que para optimizar el tamaño del bote, pero parece que ninguno de ellos para hacer de la ‘mejor’ en busca del histograma en cada caso, lamentablemente : (¿hay una manera fácil de elegir el tamaño, si todos los números son enteros?

Hola, que bien que hayas encontrado la respuesta a sí mismo. En ese caso, la mejor cosa a hacer es añadir una respuesta efectiva (cuadro a continuación). De esta manera los demás con la misma pregunta de encontrar una casa Q&A-recurso de estilo.
Yo no soy consciente de que un consistente trabajo de manera de escoger el tamaño del bote. Si los datos son a partir de un pequeño conjunto de números enteros, te recomiendo usar un recipiente por número. Para datos continuos que hay una alternativa para el histograma, se llama estimación de densidad de kernel (ksdensity), y existen algoritmos para elegir la óptima «bin width» (ancho de banda en ese contexto).
Y la marca de su propia respuesta aceptada, por lo que la cuestión no se presenta como sin respuesta
Sí, lamentablemente no puedo responder a mi propia pregunta hasta 8 horas después de su publicación, de lo contrario me hubiese! Voy a intentar hacerlo un poco más la búsqueda antes de publicar la próxima vez, pero que siempre tiende a ser que encuentres algo justo después de que te rindas, en mi experiencia

OriginalEl autor user129412 | 2014-01-11

1 Comentario

  1. 8

    (Sólo para cerrar la pregunta)

    Histograma es una frecuencia absoluta de la parcela de forma que la suma de todos los bin frecuencias (suma del vector de salida de la hist de la función) es siempre el número de elementos en su vector de entrada. Así que si usted desea un porcentaje de salida de todo lo que usted necesita hacer es dividir cada elemento en la salida por la que el total de número:

    x = randn(10000, 1);
    numOfBins = 100;
    [histFreq, histXout] = hist(x, numOfBins);
    figure;
    bar(histXout, histFreq/sum(histFreq)*100);
    xlabel('x');
    ylabel('Frequency (percent)');

    La normalización de un histograma y tener el eje y en porcentajes en matlab

    Si quieres reconstruir la función de densidad de probabilidad de los datos, es necesario tomar en cuenta el tamaño del bote del histograma y dividir las frecuencias por que:

    x = randn(10000, 1);
    numOfBins = 100;
    [histFreq, histXout] = hist(x, numOfBins);
    binWidth = histXout(2)-histXout(1);
    figure;
    bar(histXout, histFreq/binWidth/sum(histFreq));       
    xlabel('x');
    ylabel('PDF: f(x)');
    hold on
    % fit a normal dist to check the pdf
    PD = fitdist(x, 'normal');
    plot(histXout, pdf(PD, histXout), 'r');

    La normalización de un histograma y tener el eje y en porcentajes en matlab


    Actualización:

    Desde MATLAB R2014b, puede utilizar el «histograma» comando para producir fácilmente los histogramas con diferentes normalizaciones. Por ejemplo, el anterior se transforma en:

    x = randn(10000, 1);
    figure;
    h = histogram(x, 'normalization', 'pdf');
    xlabel('x');
    ylabel('PDF: f(x)');
    hold on
    % fit a normal dist to check the pdf
    PD = fitdist(x, 'normal');
    plot(h.BinEdges, pdf(PD, h.BinEdges), 'r');

    La normalización de un histograma y tener el eje y en porcentajes en matlab

    OriginalEl autor OmidS

Dejar respuesta

Please enter your comment!
Please enter your name here