我有一列包含以下数据:
大小:100x7
val =
USA
USA
France
USA
France
我想在饼图上显示数据。要做到这一点,我需要知道这个专栏中有多少 USA,等等。
我读到了函数 unique,accumarray 但我没有成功
我想得到一些建议如何做到这一点。
谢谢。
我有一列包含以下数据:
大小:100x7
val =
USA
USA
France
USA
France
我想在饼图上显示数据。要做到这一点,我需要知道这个专栏中有多少 USA,等等。
我读到了函数 unique,accumarray 但我没有成功
我想得到一些建议如何做到这一点。
谢谢。
使用 的第三个输出unique
,并确保这些输入字符串在一个cell
数组中。的第三个输出unique
非常酷,因为它为输入中看到的每个唯一数量分配一个唯一 ID。因此,如果您有一个从a
to的字符序列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 次。
您可以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)
如果您有统计工具箱,您还可以执行以下操作:
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