【问题标题】:Matlab barh bars and legend are not in the same directionMatlab barh 条和图例不在同一个方向
【发布时间】:2014-11-27 15:29:09
【问题描述】:

在 matlab 中将矩阵绘制为多个水平条时(使用barh),matlab 将第一列作为底部条,最后一列在顶部。 然而,图例是相反的,所以第一项是图例中的顶部。 我认为这看起来很混乱。见附图

    data = [0.8000    0.1000    0.6000    0.4500
    0.3000    0.5000    0.7000    0.3500
    0.4000    0.4500    0.2000    0.5000];
    barh(data);
    legend('Column 1', 'Column 2', 'Column 3', 'Column 4');

如何反转图例顺序?

(将legend命令中的item顺序颠倒,只是改变了图例中的字符串,并没有改变颜色,所以顺序还是倒过来了,标签是错误的..)

【问题讨论】:

  • 哪个版本的 Matlab?
  • 这是个好问题。 Octave 表现出相同的行为,我还没有找到重新排序图例条目的方法。文件交换提交reorderLegend (mathworks.co.uk/matlabcentral/fileexchange/37265-reorderlegend) 听起来很有希望,但它似乎不适用于条形图。不过,这可能是一个很好的起点。

标签: matlab bar-chart legend


【解决方案1】:

你可以这样做:

data = [0.8000    0.1000    0.6000    0.4500
        0.3000    0.5000    0.7000    0.3500
        0.4000    0.4500    0.2000    0.5000];
h = barh(data);
legend(fliplr(h),'Column 4', 'Column 3', 'Column 2', 'Column 1');

通过这种方式,您可以更改句柄的顺序。图例条目是手动重新排序的。

【讨论】:

  • 文字在图例中反转,但颜色没有反转,所以它最终是错误的。
  • @am304:这很有趣,因为它在这里工作得非常好。如果句柄是列向量,则翻转不会做任何事情,但像 flipud(h(:)) 这样的东西应该可以解决这个问题。
  • 是的,句柄位于列向量中,但使用 flipud(h(:)) 而不是 fliplr(h) 只会恢复到顶部带有 Column 1 的原始图例。
【解决方案2】:

对于 2017b 中的堆积条形图,您最好使用一个小函数来翻转图例条目:fliplegend

只需绘制条形图并像运行图例一样运行此程序:

figure();
bb=bar(data, 'Stacked','FaceColor','flat');
labels={'label1','label2'};
fliplegend(labels);

【讨论】:

    猜你喜欢
    • 2015-05-21
    • 2019-02-27
    • 1970-01-01
    • 2012-09-26
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    相关资源
    最近更新 更多