0

我想创建一个垂直条形图。这是我的代码:

bar (x, sensiv);
title ('Promedio X')
xlabel('Nm')
ylabel('Refl.')

问题是它看起来像一个楼梯图。我尝试添加 (x,sensiv, 'stacked') 但它不起作用。它看起来是分组的,如下图所示:

图 http://imageshack.us/a/img689/9449/capturawv.jpg

我认为这是因为 x 轴,但我无法改变它。我该怎么做?有人知道我该怎么做吗?

编辑

谢谢科林!我试过放大,我理解你的意思,我试过不同的价值观,就像 slayton 和你说的那样。

值为 0.000001 的图形 值为 1 的图形 我认为这可能是我编写情节的方式,有可能吗?

abc=0;
for p=(61:201)
    abc(p)=out1_c;
end
for p=(151:301)
    abc(p)=out2_c;
end
for p=(231:380)
    abc(p)=out3_c;
end
for p=(381:596)
    abc(p)=out4_c;
end
for p=(1152:1531)
    abc(p)=out5_c;
end
for p=(1651:2051)
    abc(p)=out7_c;
end
for p=(2052:2151)
    abc(p)= 0;
end
4

2 回答 2

1

条形图中条形宽度的默认值为 0.8,因此如果您当前没有指定宽度,则每个条形之间应该有间隙。这听起来很明显,但是您是否尝试过放大创建的条形图?对于某些数据集,bar 函数将返回一个看起来像阶梯图的图,但如果放大得足够远,实际上会有间隙。如果是这种情况,那么您应该能够通过修改 slayton 建议的宽度参数来获得所需的间隙。

编辑

好的。第一件事。如果您想发布更多信息,您应该将其添加到您的问题中,而不是将其作为新答案发布!您可以通过单击页面上问题所在下方的编辑按钮来执行此操作。为了使内容更具可读性,您可以像我在这里所做的那样,在您的编辑前加上一个大写的粗体标题“EDIT”。如果可以,请立即尝试将您提供的其他信息移回您的问题中,然后删除答案。

其次,老实说,您发布的附加信息有些令人困惑。但是,我想我现在明白你想要什么了。您希望 7 个柱达到高度 out1_c、out2_c、...、out7_c(变量名称取自您的附加信息),每个柱之间有一个小间隙,x 轴反映(大约)450-550 的间隔, 550-650 等

好吧,如果你想要 7 个条,那么你希望你的输入只有七个元素。放:

y = [out1_c; out2_c; out3_c; out4_c; out5_c; out6_c; out7_c];

y 现在为您提供条形图在 y 轴上的高度。要在 x 轴上定位条形,请定义一个向量 x,它也有七个元素,其中每个元素给出您希望条形在 x 轴上的位置的中点。例如:

x = [100; 200; 300; 400; 500; 600; 700];

然后只需使用bar(x, y). 这应该让你开始。

关于您发布的代码的最后一点,您实际上可以完全避免循环:阅读矢量化。但是如果你要坚持循环,第一个也是最重要的规则是预先分配你的向量/矩阵。在您的代码abc中以标量(1 x 1 矩阵)开始,但是对于每个 p,您在索引 p 处添加一个元素。在后台实际发生的是对于每个 p,matlab 正在废弃abc您在内存中的当前,并使用附加元素从头开始重新构建它。正如您所料,这会使您的代码速度减慢许多数量级。

于 2012-09-19T03:43:03.430 回答
0

您可以通过将 0 到 1 之间的值传递给 来设置各个条的宽度bar。通过 1 表示条之间不应有空格

bar(x,y,1)

传递小于 1 的任何值都会减小条形尺寸并在各个条形之间引入间距

bar(x,y,.5)
于 2012-09-18T13:30:16.083 回答