2012-08-15 9 views
6

Gibt es eine einfache Möglichkeit, ein Histogramm aus einem Zell-Array wie dem folgenden zu erstellen? Der Abstand zwischen den aufeinanderfolgenden Balken sollte genau gleich sein und die Bezeichnungen der x-Achse sollten die entsprechenden Namen der Variablen in vertikaler Ausrichtung sein.Strings zählen und Plot-Histogramm

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

Antwort

8

Ich möchte auch einen besseren Weg wissen. Fwiw, ich habe countmember auf Umwegen verwendet, um Daten wie diese zu plotten. I.E. wenn die Daten geschrieben Sie A

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

Ach ja, um die Ausrichtung der Etiketten zu ändern, klicken Sie auf [X-Achsen-Hilfsbeschriftungen drehen] (http://www.mathworks.com/matlabcentral/fileexchange/27812-rotate-x-axis-tick-labels) aus dem Dateiaustausch. – AGS

+0

Nochmals vielen Dank! Sie sind mein Held! : D – user706838

+0

Heh! Schön, dass es hilft. – AGS

5

benannt wurde Wenn Sie den Zugriff auf die Statistiken Toolbox haben, ist grp2idx sehr nützlich:

%# 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

Eine Lösung, die nur verwendet integrierte Funktionen

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

Sie können die Histogrammfunktion auch wie folgt verwenden:

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

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

histogram(ic)