【问题标题】:How to adjust bar absolute width in MATLAB如何在 MATLAB 中调整条形绝对宽度
【发布时间】:2018-11-08 12:38:43
【问题描述】:

我对 MATLAB 中的调整栏感到困惑,例如,当使用 bar 时:

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 函数的第三个参数似乎是一个相对宽度,它与第一个和第二个参数的输入大小相关。无论输入多少数据点,我都可以修复绝对条宽吗?或者有更好的功能来绘制这样的数字?非常感谢您的帮助!

【问题讨论】:

    标签: matlab data-visualization matlab-figure


    【解决方案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) 示例中,两个值彼此接近的可能性更大,因此增加宽度有助于您看到某些东西(因为条形重叠)。

    【讨论】:

    • 你的回答真的很有帮助。 bar函数中的'width'参数是相对于输入数组x中元素之间的最小距离。
    • SAMPLE_NUM = 4; BAR_WIDTH = 0.005; x = randsample(0:0.00001:1,SAMPLE_NUM); y = randn(SAMPLE_NUM,1); x_sorted = 排序(x); minDis = min(x_sorted(2:end) - x_sorted(1:(end-1))); scaleRatio = BAR_WIDTH/minDis;条(x,y,比例); xlim([0,1]);无论 SAMPLE_NUM 如何变化,此脚本都可以生成由 BAR_WIDTH 设置的特定宽度的条形图
    【解决方案2】:

    来自documentation

    bar(___,width) 设置相对条形宽度,它控制 组内的条形分隔。将 width 指定为标量值。 将此选项与 以前的语法。

    提供的例子如下:

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

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

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

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

    【讨论】:

    • 感谢您的快速帮助!我已经尝试了“宽度”参数,它在我的问题的第二个示例中效果很好。但是当输入数据大小发生变化(从 100 到 10)时,相同的“宽度”比例似乎太大了。在我的项目中,我无法手动调整“宽度”,所以无论我输入多少数据点,我都想修复条形宽度。
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-21
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 2011-02-03
      相关资源
      最近更新 更多