通过将数字分组到一个范围内来绘制matlab / octave

时间:2015-03-07 15:58:36

标签: matlab plot gnuplot octave

我正在尝试将数据设为x轴 y轴设为按10 分组的值。参见下面的Plot作为示例

我尝试使用 bar(x),但我不确定如何在正确的绘图类别中获取数字。

例如: 如果数据是x=1,5.3,9,10.5,12,13,15.2,25,191,192.4

the group 0-10 should be 1,5.3,9
the group 10.1-20 should be 10.5,12,13,15.2
the group of 20.1-30 should be 25
.
.
.
the group of 190.1-200 should be 191,192.4

Barplot

PS:我正在使用octave 3.8.1,就像matlab

2 个答案:

答案 0 :(得分:3)

您可以使用histc。但是histc认为每个bin的左边缘,而不是右边缘的相等性:

  

bincounts = histc(x,binranges)计算x中每个指定bin范围内的值的数量。输入binranges确定每个bin的端点。输出bincounts包含每个bin中x的元素数。

     

例如,如果binranges等于向量[0,5,10,13],则histc会创建四个分箱。第一个bin包含大于或等于0且严格小于5的值。第二个bin包含大于或等于5且小于10的值,依此类推。最后一个bin包含标量值13

要在左边设置相等条件,最好使用bsxfun手动执行:

y = diff(sum(bsxfun(@le, x(:), 0:10:200), 1));

sum(bsxfun(...), 1)查找x的条目数小于或等于010,... 200的条目数;然后diff(...)提供所需的结果y

y =
     3     4     1     0     0     0     0     [...]     2

然后,您可以使用bar(y)绘制条形图。如果您还想更改x轴上显示的文本,请设置轴的'xticklabel'属性:

bar(y);
strings = {'0-10', '10-20', '20-30'}; %// manually define all strings up to '190-200'
set(gca, 'xticklabel', strings)

答案 1 :(得分:1)

使用您的数据,您可以使用:

x = [1 5.3 9 10.5 12 13 15.2 25 191 192.4];
nbins = round(max(x)/10+.5);
hist(x, nbins);

这是结果: This is the result