2012-08-15 17 views
6

Có cách nào đơn giản để tạo biểu đồ từ một mảng ô như biểu đồ dưới đây không? Khoảng cách giữa các thanh liên tiếp phải giống hệt nhau và các nhãn của trục x phải là tên tương ứng của các biến bên dưới theo hướng thẳng đứng.Đếm chuỗi xuất hiện và biểu đồ lô

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

Trả lời

8

Tôi cũng muốn biết cách tốt hơn. Fwiw, tôi đã sử dụng countmember theo cách đường vòng để vẽ dữ liệu như thế này. I E. nếu các dữ liệu bạn gửi đã được đặt tên A

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

Ồ, để thay đổi hướng của nhãn, hãy kiểm tra [Xoay nhãn dấu X trục] (http://www.mathworks.com/matlabcentral/fileexchange/27812-rotate-x-axis-tick-labels) từ trao đổi tập tin. – AGS

+0

Cảm ơn bạn một lần nữa! Bạn là người hùng của tôi! : D – user706838

+0

Heh! Vui mừng nó giúp. – AGS

5

Nếu bạn có quyền truy cập vào số liệu thống kê hộp công cụ, grp2idx là rất hữu ích:

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

Một giải pháp mà chỉ sử dụng built-in chức năng

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

Bạn cũng có thể sử dụng chức năng biểu đồ như sau:

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

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

histogram(ic)