作者:FXHT4564_845 | 来源:互联网 | 2023-02-13 15:14
假设我们有以下文字
s='i love georgia and its nature';
我想要的是计算每个字母的出现频率(当然不包括空格)和草绘一些图表(例如条形图),首先我创建了使用地图容器计数字母的代码
function character_count(s)
% s is given string and given program will count occurence of letters in
% sentence
MAP=containers.Map();% initialize MAP for frequency counting
n=length(s); % get length of given string
letters=unique_without_space_sorting(s);
for ii=1:n
if ~isletter(s(ii))==1
continue;
elseif isKey(MAP,s(ii) )
MAP(s(ii)) = MAP(s(ii)) + 1;
else
MAP(s(ii)) = 1;
end
end
y=values(MAP);
y= cell2mat(y);
bar(y);
set(gca,'xticklabel',letters)
end
这里的功能
letters=unique_without_space_sorting(s);
返回字符串s的字母数组,没有排序和空格,这里是它对应的代码
function cell_stirng=unique_without_space_sorting(s)
s=regexprep(s,'[^\w'']','');
[~, idxs, ~] = unique(s, 'last');
s= s(sort(idxs));
n=length(s);
cell_stirng=cell(n,1);
for jj=1:n
cell_string{jj}=s(jj);
end
end
当我运行此代码时,我得到了以下图像
如你所见,x轴上没有标签,我该如何解决这个问题呢?提前致谢
1> Suever..:
您可以使用第一个输出unique
来为您提供唯一值,并将它们用作x标签
[values, idxs, ~] = unique(s, 'last');
% Make sure that they aren't sorted
[~, sortind] = sort(idxs);
values = num2cell(values(sortind));
% And later after creating your bar plot
set(gca, 'xtick', 1:numel(values), 'XTickLabels', values);
或者不是这样做,您可以使用stable
输入来unique
确保它们的外观顺序相反.
S = lower(strrep(s, ' ', ''));
[values, ~, b] = unique(S, 'stable');
hist(b, unique(b))
set(gca, 'xtick', 1:numel(values), 'xticklabels', num2cell(values))
或者如果你想要所有字母的直方图
S = lower(strrep(s, ' ', ''));
counts = histcounts(double(S), double('a':'z'));
bar(counts)
set(gca, 'xtick', 1:26, 'xticklabels', num2cell('a':'z'))