如何在 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 函数的第三个参数似乎是一个相对宽度,它与第一个和第二个参数的输入大小相关。无论输入多少个数据点,我都可以固定绝对条宽吗?或者有更好的功能来绘制这样的图形?非常感谢您的帮助!
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 点)。
我对 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 函数的第三个参数似乎是一个相对宽度,它与第一个和第二个参数的输入大小相关。无论输入多少个数据点,我都可以固定绝对条宽吗?或者有更好的功能来绘制这样的图形?非常感谢您的帮助!
bar(___,width)
sets the relative bar width, which controls the separation of bars within a group. Specifywidth
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 点)。