如何绘制分组条形图?

时间:2017-07-30 11:17:24

标签: matlab plot bar-chart matlab-figure

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

我得到一个这样的数字:

Image result

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

Expected image

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

请帮我解决这个问题。

我附加了text file,其中包含P1,R1和F1。

提前致谢。

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

1 个答案:

答案 0 :(得分:0)

你几乎就在那里,但你有两个错误。

  1. 您从 Precision (P1,P2 ...)的整个向量和其他测量值构建data,而使用bar时,您只需输入值为bar绘制。 bar绘制的所有值都是标量like here,因此必须先执行所有统计,然后才能使用P_1 = mean(P1)进行绘图。在您的情况下,我认为您希望获取每个变量的平均值,因此对于所有变量,R_1 = mean(R1)data等等。最终,你将从你的12个向量中获得12个标量。
  2. 然后,您需要在矩阵中正确排列这些值。每行代表一组,每列代表一种颜色。基本上,你做了一些接近但却搞砸了逗号和线刹。
  3. 您需要做的就是正确构建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中,您可以使用;data指定矩阵的形状,也可以使用空格和换行符。 If you mix both you get in trouble ...

    所以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'); 是4乘3,每行都是一个演示,每列都是一个度量。对于一些随机数据,它看起来像这样:

    path

    enter image description here