我有一个带有以下规范的Matlab表:第一列是属性名称,第二列是它出现的次数。 Here是包含数据的完整csv文件。这是一段摘录:
RSA_WITH_RC4_128_SHA,240
RSA_WITH_RC4_128_MD5,184
RSA_WITH_AES_128_CBC_SHA,464
...
现在我想绘制直方图,并在下面显示频率属性名称。所以它可能看起来像这样(抱歉粗略绘图):
请不要比喻条形图,它们只是一个样本,以显示我想要下面的文字标签,条形图的分组并不重要。
我该怎么做?
答案 0 :(得分:1)
首先,您可以使用table
读取数据,这非常方便使用。然后,使用表格第二列的数据用bar
绘制条形图T{:,2}
。可以通过手动设置XLim
- 属性来裁剪绘图右侧的额外空间。
之后,我们构建标签的文本。因此,您希望将表的第一列与表的第二列中的数字的字符串表示形式连接起来。 strcat
可以对单元格数组T{:,1}
和arrayfun
返回的单元格数组进行连接,并将,
放在它们之间。
现在我们需要设置XTick...
- 属性以获得所需的结果:XTick
指定沿x轴的刻度位置。 XTickLabel
定义前定义位置的标签文本。使用XTickLabelRotation
,我们可以将标签旋转给定的度数。最后,TickLabelInterpreter
设置为none
,以防止下标后的文字被下标。
以下是代码:
% read data into table
T = readtable('path_0.csv');
% draw bars
figure;
bar(1:size(T,1),T{:,2});
set(gca,'XLim',[0,size(T,1)+1]);
grid on;
% change labels
xLabels = strcat(T{:,1},',',arrayfun(@num2str,T{:,2},'UniformOutput',false));
set(gca,'XLim',[0,size(T,1)+1],...
'XTick',1:length(xLabels),...
'XTickLabel',xLabels,...
'XTickLabelRotation',45,...
'TickLabelInterpreter','none');