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

How to adjust bar absolute width in MATLAB

我对 MATLAB 中带调整的条形图感到困惑,例如,当像这样使用条形图时:

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

我得到这样一张图片:

好像吧台太细了,不太好看。搜索帮助后,我可以使用如下代码:

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

我明白了:

好像好多了。但是,如果我将样本编号从 100 更改为 10,则相同的代码将不起作用。

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

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

来自documentation:

bar(___,width) sets the relative bar width, which controls the separation of bars within a group. Specify width as a scalar value. Use this option with any of the input argument combinations in the previous syntaxes.

提供的例子如下:

Set the width of each bar to 40 percent of the total space available for each bar.

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

所以底线是:宽度指定为每个栏可用的总 space 的百分比。 Yoru 问题来自这样一个事实,即您有太多条形图,因此每个条形图可用的 space 很小。将宽度设置为 space 可用宽度的 50% 或 5000% 仅意味着每个条形图将在相邻条形图上有相当大的重叠。因为你有这么多,中间的情节看起来 "reasonable" 因为我怀疑很多条是重叠的,而且很多条都为零,所以你看不到它们。如果您减少到合理数量的条形,如上一个示例所示,那么将宽度设置为 5000% 看起来很荒谬。

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

user @am304 关于 width 参数是正确的

您的代码中发生的事情是您将 x 值设置为来自 randsample(0:0.0001:1,10)

的结果

如果您将图的宽度设置为 1,则意味着直接相邻的 2 个条将以相等的 spaced x 相互接触。

在您的例子中,您的间距 x 不规则。 条形的宽度由两个 x 值(您从 randsample() 获得)之间的最小距离确定。有时这个 space - 因此你的栏的宽度 - 非常小。有时范围更广。

将 with 更改为 1 并绘制多个图。你会注意到两个总是相互接触,没有一个重叠,所有其他的之间有 spaces。如果您将宽度更改为 50,则绘图有时会严重重叠(取决于 randsample 的随机性),因为您的条形比两个 x 值之间的最小宽度大 50 倍。

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

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

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

创建一个类似于您第二次尝试的绘图,但条形宽度固定(4 点)。