代码之家  ›  专栏  ›  技术社区  ›  Katharina Fürsatz

Scilab中带误差条的条形图

  •  0
  • Katharina Fürsatz  · 技术社区  · 9 年前

    close();
    
    x=[2, 4, 8];
    y=[0.2 0.12 0.06; 0.17 0.22 0.05; 0.19 0.20 0.07];
    dev=[0.08 0.08 0.03; 0.03 0.05 0.02; 0.04 0.06 0.02];
    
    bar(x, (y+dev), 'w--')
    bar(x, y)
    

    但这并没有告诉我下限(而且看起来不太好)

    2 回复  |  直到 9 年前
        1
  •  1
  •   luispauloml    9 年前

    你仍然可以使用 errbar() bar() 它绘制了 y

    要使其工作,您需要检索每个集合的移位量,并将该值添加到 x errbar() . 获得 result like this ,您可以使用以下代码(在asker的注释后更新):

    x=[2, 4, 8];
    y=[0.2 0.12 0.06; 0.17 0.22 0.05; 0.19 0.20 0.07];
    dev=[0.08 0.08 0.03; 0.03 0.05 0.02; 0.04 0.06 0.02];
    bar(x,y)
    
    //get the entity handler
    e=gce();
    
    //loop over the entity to retrive x_shift values
    for i = 1:length(y,'c')
        x_shift(i,:) = e.children(i).x_shift;
    end
    
    //flip x_shift vertically
    x_shift = x_shift($:-1:1,:);
    
    //plot the error bars
    for i = 1:length(y,'c')
        errbar(x + x_shift(i), y(:,i)', dev(:,i)', dev(:,i)');
    end
    
        2
  •  0
  •   Katharina Fürsatz    9 年前

    @路易斯·保罗 谢谢你的回答。在实现它时,我发现了一个小错误。在for循环中,你必须使用y的大小,而不是x。它之所以有效是因为y恰好是一个平方矩阵。我把y放大了一行,把偏差改为相同的y值,看看矩阵定义的方法是否正确,我没有混淆这些值。

    x=[2; 4; 8];
    y=[0.2 0.12 0.06 0.1; 0.17 0.22 0.05  0.1; 0.19 0.20 0.07  0.1];
    dev=[0.2 0.12 0.06 0.1; 0.17 0.22 0.05  0.1; 0.19 0.20 0.07  0.1];
    
    bar(x,y)
    
    //get the entity handler
    e=gce();
    
    //loop over the entity to retrive x_shift values
    for i = 1:size(y,'c')
        x_shift(i,:) = e.children(i).x_shift;
    end
    
    //flip x_shift vertically
    x_shift = x_shift($:-1:1,:);
    
    //plot the error bars
    for i = 1:size(y,'c')
        errbar(x + x_shift(i), y(:,i)', dev(:,i)', dev(:,i)');
    end