【问题标题】:How can I draw a grouped bar plot?如何绘制分组条形图?
【发布时间】:2018-01-06 01:01:26
【问题描述】:

我已经计算了算法的精度、召回率和 f 度量。我想为三个值绘制条形图。精度 = 1*256,召回率 = 1*256,F-measure = 1*256。

我得到一个像这样的数字:

但是,我想画这样的条形图:

我对 Matlab 编程非常陌生,我已经尝试过以下代码

data = [P_1,R_1,f_1
    P_2,R_2,f_2
    P_3,R_3,f_3
    P_4,R_4,f_4];
b=bar(data);
set(b,{'FaceColor'},{'b';'r';'y'});
grid on;
set(gca,'XTickLabel',{'DEMO1','DEMO2','DEMO3','DEMO4'});
legend('Precision','Recall','F_\beta');

请帮我解决这个问题。

我附上了由 P1、R1 和 F1 组成的text file

提前致谢。

编辑1: 我们总共有 256 个值的 12 个向量,但我们必须计算平均值或中值或任何值。最后,您只需计算从 P1 到 P_1 的一个值。非常感谢@EBH

【问题讨论】:

    标签: matlab plot bar-chart matlab-figure


    【解决方案1】:

    你快到了,但你有 2 个错误。

    1. 您从Precision(P1、P2...)的整个向量和其他测量值构建data,而使用bar,您只需输入要绘制的值。 bar 绘制的所有值都是标量 like here,因此 必须在使用 bar 进行绘图之前进行所有统计。在你的情况下,我相信你想取每个变量的平均值,所以 P_1 = mean(P1)R_1 = mean(R1) 等所有变量。最终,您将从 12 个向量中得到 12 个标量。
    2. 然后,您需要在矩阵中正确排列这些值。每行代表一个组,每列代表一种颜色。基本上,你做了一些接近但搞砸了逗号和刹车线的事情。

    您需要做的就是正确构建data(当其中的所有变量都是标量时):

    data = [P_1 R_1 f_1
        P_2 R_2 f_2
        P_3 R_3 f_3
        P_4 R_4 f_4];
    

    请注意,我删除了所有逗号,因为在 Matlab 中,您可以使用 ,; 指定矩阵的形状,或者使用空格和换行符。 If you mix both you get in trouble...

    所以data 是 4×3,每一行是一个演示,每一列是一个度量。使用一些随机数据,它看起来像这样:

    data = rand(4,3);
    b = bar(data);
    set(b,{'FaceColor'},{'b';'r';'y'});
    grid on;
    set(gca,'XTickLabel',{'DEMO1','DEMO2','DEMO3','DEMO4'});
    legend('Precision','Recall','F_\beta');
    

    【讨论】:

    • 非常感谢您的回答,但我仍然保留旧的条形图。我附上了由 p1,r1,f1 值组成的文本文件
    • @Azaad 我看不到文件(链接不起作用),但这应该不超过 12 个值,您可以在问题中输入它们。
    • 正如我之前提到的 p1,r1,f1 包含 1*256 个值。我附上了文本文件。请点击文本文件链接
    • @Azaad 好的,所以您总共有 12 个 256 个值的向量,但是您想在条形图中看到什么?他们的意思?它们的最大值?另一个统计?最后,您必须只计算一个从 P1 到 P_1 的值
    • @Azaad 看到我对答案的编辑,让它为你澄清事情。
    猜你喜欢
    • 2021-11-25
    • 1970-01-01
    • 2020-12-09
    • 2021-01-12
    • 1970-01-01
    • 2012-10-23
    • 2020-03-22
    • 2019-08-16
    相关资源
    最近更新 更多