来自matlab中表格的堆积条

时间:2017-02-11 17:23:24

标签: matlab matlab-figure stacked-chart matlab-table

我想从表格创建堆积条形图。这里有一个我正在研究的表格类型的MWE:

clear all; 

country1=rand(5,1); 
 country2=rand(5,1);
 country3=rand(5,1);
 country4=rand(5,1);
 country5=rand(5,1);

 date=1990:1994;
 T=table(date',country1,country2,country3,country4,country5);
 T.Properties.VariableNames{1}='date';
 T.Total=sum(T{:,2:end},2); 
 T{:,2:end} = T{:,2:end}./T.Total; 
 A = table2array(T);
 A(:,[1,end])=[];
 A=sort(A,2); 
 TT=array2table(A,'VariableNames',{'country1','country2','country3','country4','country5'});
TT.Date=T.date;
TT.Total=T.Total;
T_new=table(TT.Date, TT.country1,TT.country2,TT.country3,TT.country4,TT.country5,TT.Total);
T_new.Properties.VariableNames=T.Properties.VariableNames;
T_new.World=sum(T{:,2:4},2);
T_new.World=1-(T_new.country4+T_new.country5); 
T_new(:,[2:4,end-1])=[];

T_new

date    country4    country5     World 
    ____    ________    ________    _______

    1990     0.2933     0.29471     0.41199
    1991    0.31453     0.34511     0.34035
    1992    0.22595     0.29099     0.48307
    1993    0.26357     0.33336     0.40306
    1994    0.28401     0.28922     0.42677

Stacked BAR的类型

====================

基于T_new表,我想创建一个堆积条形图。在'x'轴上,图表应显示日期(1990,1991等),每个日期应为一个堆积条。因此,例如,对于1990,应该有一个条形图堆叠值0.2933 0.29471 0.41199

理想,在堆栈栏中我还想包含相应值的(country1,country2,world)标签。

我如何在matlab中做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

bar(T_new{:,1},T_new{:,2:end},'stacked')
legend(T_new.Properties.VariableNames(2:end))

stacked bar

答案 1 :(得分:0)

您提供的代码包含一行错误:

T{:,2:end} = T{:,2:end}./T.Total

Error using  ./ 
Matrix dimensions must agree.
Error in stacked_bars (line 14)
T{:,2:end} = T{:,2:end}./T.Total;

因为T{:,2:end}(5 x 6)矩阵而T.Total(5 x 1)数组

您可以使用例如:

来替换该行
T{:,2:end}=bsxfun(@rdivide,T{:,2:end},T.Total)

修复错误后,绘制标签的另一种方法(相对于已发布的答案)可以使用text function在每个stackedbars中绘制一个字符串。

您可以通过这种方式识别绘制字符串的点的xy坐标:

  • x:对于每组条形图,都是相应的date(您需要在左侧稍微移动该值,以使文本相对于条形图居中,因为{{1}使用text坐标作为起点
  • x:因为第一个标签(下面)可能只是酒吧高度的一半;从第二个栏开始,你需要添加前一个栏的高度

这种方法的可能实现如下:

y

在循环中,生成以下图像:

enter image description here

希望这有帮助,

Qapla'