在Matlab中绘制垂直条形图的楼梯图

时间:2012-09-18 12:01:42

标签: matlab graph plot

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

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

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

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

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

编辑

感谢科林!我试图放大,我明白你的意思,我尝试过不同的价值,正如slayton和你说的那样。

Graph with value 0.000001 Graph with value 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

2 个答案:

答案 0 :(得分:1)

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

修改

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

其次,我必须说实话,你发布的其他信息有点令人困惑。但是,我想我明白你现在想要什么。您希望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轴上看到条形图的高度。要在x轴上找到条形,请定义一个矢量x,该矢量x也有七个元素,其中每个元素给出了您希望条形在x轴上的中点。例如:

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

然后只使用bar(x, y)。这应该可以帮到你。

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

答案 1 :(得分:0)

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

bar(x,y,1)

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

bar(x,y,.5)