2012-08-15 10 views
6

¿Hay alguna manera directa de crear un histograma a partir de una matriz de celdas como la siguiente? El espacio entre las barras consecutivas debe ser exactamente el mismo y las etiquetas del eje x deben ser los nombres correspondientes de las variables siguientes en una orientación vertical.Cuentos de ocurrencias de cadenas y gráfico de histograma

'w464' 
'w462' 
'w461' 
'w464' 
'w461' 
'w463' 
'w466' 
'w461' 

Respuesta

8

Me gustaría saber una mejor manera, también. Fwiw, he usado countmember de una manera indirecta para trazar datos como este. ES DECIR. si los datos informados fue nombrado A

>> B={sort(unique(A)) countmember(sort(unique(A)),A)}; 
>> bar(B{2}); 
>> set(gca,'XTickLabel',B{1}) 
+1

Oh, para cambiar la orientación de sus etiquetas, consulte [Rotar las etiquetas de las marcas del eje X] (http://www.mathworks.com/matlabcentral/fileexchange/27812-rotate-x-axis-tick-labels) desde el intercambio de archivos. – AGS

+0

¡Gracias de nuevo! ¡Eres mi héroe! : D – user706838

+0

¡Heh! Me alegro de que ayude. – AGS

5

Si usted tiene acceso a la caja de herramientas estadísticas, grp2idx es muy útil:

%# sorting is only necessary if the output should be sorted as well 
[idx,label] = grp2idx(sort(A)) 

hist(idx,unique(idx)); 
set(gca,'xTickLabel',label) 
3

Una solución que sólo utiliza funciones integradas

[u,~,n] = unique(A(:)); 
B = accumarray(n, 1, [], @sum); 
bar(B) 
set(gca,'XTickLabel',u) 
1

También puede usar la función de histograma de la siguiente manera:

[C,~,ic] = unique(A); 

fig1 = figure; 
axes1 = axes('Parent',fig1,'XTickLabel',C,'XTick',1:length(C)); 
hold(axes1,'on'); 

histogram(ic) 
Cuestiones relacionadas