如何在MATLAB中调整条形的绝对宽度

时间:2018-11-08 12:38:43

标签: matlab data-visualization matlab-figure

例如,在使用像这样的bar时,我对MATLAB中的调整条感到困惑。

bar(randsample(0:0.0001:1,100),randn(100,1))

我得到这样的图像: enter image description here

条形图似乎太细了以至于外观不好。搜索帮助后,我可以使用如下代码:

bar(randsample(0:0.0001:1,100),randn(100,1),50)

我得到这个: enter image description here

似乎好多了。但是,如果我将样本编号从100更改为10,则相同的代码将无法工作。

bar(randsample(0:0.0001:1,10),randn(10,1),50)

enter image description here

我希望我已经清楚地解释了我的问题。条形函数的第三个参数似乎是相对宽度,它与第一个和第二个参数的输入大小相关。无论输入多少数据点,我都可以固定绝对条宽度吗?还是有一个更好的功能来绘制这样的数字?非常感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

用户@ am304正确使用width参数

代码中发生的事情是,您为x的结果设置了randsample(0:0.0001:1,10)

如果将图的宽度设置为1,则意味着彼此紧邻的2条线将以等间距的x相互接触。

在您的情况下,您有不规则的x间距。 条的宽度由两个x值(从randsample()得到的最小距离)确定。有时,此空间(以及条的宽度)很小。有时范围更广。

将with更改为1并绘制多个图。您会注意到,两个始终相互接触,没有一个重叠,而其他两个之间都有空格。如果您将宽度更改为50,则图将使某些主题重合(取决于randsample的随机性),因为条形图的宽度是两个x值之间最小宽度的50倍。

在您的randsample(0:0.0001:1,100)示例中,两个值彼此接近的可能性更大,因此增加宽度可以帮助您看到一些东西(因为条形重叠)。

答案 1 :(得分:0)

来自documentation

  

bar(___,width)设置相对条形宽度,该宽度控制   组内的条形分隔。指定width作为标量值。   将此选项与输入法中的任何输入参数组合一起使用   以前的语法。

提供的示例如下:

  

将每个栏的宽度设置为可用总空间的40%   每个栏。

y = [75 91 105 123.5 131 150 179 203 226 249 281.5];
bar(y,0.4)

enter image description here

因此底线是:宽度指定为每个条形可用总空间的百分比。 Yoru问题来自以下事实:您的酒吧太多了,因此每个酒吧的可用空间都很小。将宽度设置为可用空间的50%或5000%只是意味着每个条将在相邻条上完全重叠。因为您有这么多,所以中间图看起来“合理”,因为我怀疑很多小节重叠了,并且很多小节为零,所以您看不到它们。如上例所示,如果您将条形图合理化,那么将宽度设置为5000%看起来很荒谬。

因此,总结一下:减少条的数量,并在> 0和1之间指定条宽度(1为无间隙,所有条相互接触)。

答案 2 :(得分:0)

绘制带有x个随机位置的东西的更好方法是使用stem。默认情况下,它从零线到基准线绘制一条线,并用圆圈代表每个基准线。但这可以修改。例如:

stem(randsample(0:0.0001:1,100),randn(100,1), 'Marker','none', 'LineWidth',4)

创建与您的第二次尝试相似的图,但是具有固定宽度的条形图(4个点)。