Matlab条形图和图例不在同一方向

Matlab条形图和图例不在同一方向,matlab,bar-chart,legend,Matlab,Bar Chart,Legend,在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);

在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');
如何颠倒图例顺序

(在图例命令中颠倒项目的顺序只会更改字符串,而不会更改图例中的颜色,因此顺序仍然颠倒,标签错误。

您可以执行以下操作:

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');

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

对于2017b中的堆叠条形图,最好使用一个小功能翻转图例条目:

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

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

哪个版本的Matlab?这是个好问题。八度音阶表现出同样的行为,我还没有找到一种方法来重新排列图例条目。文件交换提交
reorderLegend
()听起来很有希望,但它似乎不适用于条形图。不过,这可能是一个很好的起点。图例中的文字是颠倒的,但颜色不是颠倒的,因此它最终是错误的。@am304:这很有趣,因为在这里它工作得非常好。如果控制柄是一个列向量,则翻转不起任何作用,但类似于
flipud(h(:)
的操作应该可以解决这一问题。是的,控制柄位于列向量中,但使用
flipud(h(:)
而不是
fliplr(h)
只会恢复到原始图例,并在顶部显示
column 1