如何在Matlab中绘制具有不同高度和不同宽度的条形图?

3
我在Matlab中遇到了一个大问题,因为我想做一些不太常见的事情。基本上,我正在尝试实现一种称为Vincentizing的分组分配方式。为了做到这一点,我正在按照一篇论文的说明进行操作(Ratcliff 1979 - Group Reaction Time Distributions and an Analysis of Distribution Statistics)。一切都很顺利,直到我必须绘制实际的图形。我有一个包含数据集分位数的数组。我正在按照教程所说的方法进行操作:可以通过在横轴上绘制分位数,然后在相邻的分位数之间构建矩形来构建分布直方图,使得所有矩形具有相等的面积,如图2(下面是图片链接)。

http://postimg.org/image/btftrd6y7/

一旦我计算出分位数,我就可以将区域设置为某个值,比如10,然后我就可以计算每个条形图的高度。每个条形图的宽度是相邻两个分位数之间的距离,当然我也可以计算出来。我有所有需要的信息,但我不知道如何绘制图表。在matlab中,我该如何绘制像图中那样的图形呢?(似乎我可以绘制不同宽度的直方图,但是使用hist函数时实际上无法指定高度。然而,使用bar函数,我可以指定高度,但似乎无法改变宽度...)
感谢您的任何帮助。
1个回答

3
最简单的解决方案是使用 rectangle
% sample data: set the start of each bar, the bottom (here 0), the width and the height

x = [0.5 0.6 0.9 1 1.2]; % start of bar
y = zeros(length(x),1);
dx = diff([x 1.8]); % width of bar
dy = [1 3 2 .5 .1];


figure, hold on
for ii=1:length(x)
    rectangle('position',[x(ii) y(ii) dx(ii) dy(ii)])
end
axis([0.5 2 0 4.1])

ylabel('Prob density')
xlabel('Time')

enter image description here


谢谢。与此同时,我已经找到了自己的解决方案,等待强制性的8小时后我会在这里发布。之后我会选择您的答案作为被采纳的答案。非常感谢。 - Vaaal88
@user2116599 这也可以,但请注意,从我的经验来看,rectanglepatch 更不容易在矩形显示时出现问题。 - Buck Thorn
1
抱歉,我编辑了评论,因为代码完全混乱。再次感谢你。 - Vaaal88
使用矩形的解决方案确实更加优雅。然而,当您调用矩形函数时,您也可以编写rectangle('Position',[x(ii) 0 dx(ii) dy(ii)])。 - Vaaal88
@user2116599,没错 :) - Buck Thorn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接