我有以下数据的列:
尺寸:100x7
val =
USA
USA
France
USA
France
我想显示饼图上的数据。 要做到这一点,我需要知道美国有多少会出现在此列,依此类推。
我读的功能独特,accumarray但我不取得成功
我想获得一些建议,如何做到这一点。
谢谢。
我有以下数据的列:
尺寸:100x7
val =
USA
USA
France
USA
France
我想显示饼图上的数据。 要做到这一点,我需要知道美国有多少会出现在此列,依此类推。
我读的功能独特,accumarray但我不取得成功
我想获得一些建议,如何做到这一点。
谢谢。
您可以使用unique
与histc
-
%// Get countries and their occurences
[countries,~,id] = unique(cellstr(val),'stable')
occurrences = histc(id,1:max(id))
然后,您可以显示事件对国名作为表的数量-
>> table(countries,occurrences)
ans =
countries occurrences
_________ ___________
'USA' 3
'France' 2
显示输出作为饼图 -
>> pie(occurrences,countries)
使用的第三输出unique
,并确保这些输入字符串是在一个cell
阵列。 的第三输出unique
是相当凉的,因为它分配对于在输入端看的每个唯一数量的唯一ID。 因此,如果你有字符序列从a
到e
,这将分配一个唯一的ID为每个唯一的字符,它已经发现,1和5之间。而且,第一输出unique
给你只包含阵列独特的数量出现在输入。
然后,您可以使用accumarray
在第三输出来算多少次,你看到一个特定国家对上市的所有国家。
val = {'USA'; 'USA'; 'France'; 'USA'; 'France'};
[countries,~,id] = unique(val);
counts = accumarray(id, 1);
我得到:
counts =
2
3
也为countries
:
countries =
'France'
'USA'
请注意,每个元素counts
对应于有多少次你看到特定国家在相同的位置,在该国countries
,因此法国被认为是2倍,美国的3倍。
如果你有统计工具箱,你也可以做到以下几点:
valnom = nominal(val);
countries = getlabels(valnom);
occurrences = levelcounts(valnom);
这会给你出现的次数,通过使用正则表达式:
unique_countries = unique(regexp(val,'^.*$','lineanchors','match','dotexceptnewline'));
count_unique_countries = zeros(size(unique_countries));
for ii = 1:numel(unique_countries)
count_unique_countries(ii) = numel(regexp(val,['^' unique_countries{ii} '$'],'lineanchors'));
end
这两个输出变量现在
unique_countries =
'France' 'USA'
count_unique_countries =
1 2