直方图在matlab中给出了不准确的结果

时间:2018-02-08 09:24:39

标签: matlab histogram

我正在尝试使用我的数据(1x150)在Matlab中创建直方图,但它出错了。首先我应该有12个刻度,每个刻度都有一个值,但matlab obly给我6个刻度。其他6个嘀嗒声丢失了我无法弄清楚原因。

我的数据;

  myData.income=         

175000
65000
35000
55000
5000
65000
25000
45000 
55000
95000
45000
45000
...
5000   
15000

这是我的代码;

STATS.histograms=figure(8);
histogram(myData.income)
xlabel('Annual income') % x-axis label
ylabel('# of participants') % y-axis label
xticks([ 0 20000 40000 60000 80000 100000 120000 140000 160000 180000 200000 220000])
xticklabels({'5.000 < ','15.000','25.000','35.000','45.000', ... 
'55.000','65.000','75.000','85.000','95.000','125.000','150.000 >'})
xlim([0 230000]); %limits
ylim([0 45]);
title('Income ');
savefig('income');

我也检查了我的数据,没有遗漏的值。当我运行这个代码时,matlab只给出了一个直方图,其中包含15.000 - 85.000个字符。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我发现了自己的错误。当我使用hiscounts时,它只给我6个值。由于我的收入被记录为5000,15000,25000等......这个功能增加了每一个&#39; 5000&#39;值为5000列。

更清楚;它将25000视为5000.当我运行&#39; histcounts&#39;功能它给了我这个输出;

>> histcounts(myData.income)

ans =

    26    44    16     6     6     3

这是我不准确的histogrtam数据的问题。所以我用这些线重新编了我的每个收入值;

%hist transform
bir = myData.income(:,1) == 5000 ;
iki = myData.income(:,1) == 15000 ;
uc = myData.income(:,1)== 25000;
dort = myData.income(:,1)== 35000;
bes = myData.income(:,1) == 45000;
alti = myData.income(:,1)==55000;
yedi = myData.income(:,1)==65000;
sekiz = myData.income(:,1)==75000;
dokuz = myData.income(:,1)==85000;
on = myData.income(:,1)==95000;
onbir = myData.income(:,1)==125000;
oniki = myData.income(:,1)==175000;
% recoding
 myData.income(bir) = 1 ;
 myData.income(iki) = 2 ;
 myData.income(uc) = 3 ;
 myData.income(dort) = 4 ;
 myData.income(bes) = 5 ;
 myData.income(alti) = 6 ;
 myData.income(yedi) = 7 ;
 myData.income(sekiz) = 8 ;
 myData.income(dokuz) = 9 ;
 myData.income(on) = 10 ;
 myData.income(onbir) = 11 ;
 myData.income(oniki) = 12 ;

由于这些行,不再覆盖或绑定到相同的值。

小心,因为我们改变了我们的值(从5000到1),我们需要选择我们的xticks。所以在我的例子中,新的刻度应为[1 2 3 4 5 6 7 8 9 10 11 12],我们的xlimit将为0到13或1到12.这取决于你!我个人喜欢y轴和我的数据栏之间的空间。这是最终的代码;

STATS.histograms=figure(8);
histogram(myData.income)
xlabel('Annual income') % x-axis label
ylabel('# of participants') % y-axis label
xticks([ 1 2 3 4 5 6 7 8 9 10 11 12])
xticklabels({'5.000 < ','15.000','25.000','35.000','45.000', ... 
'55.000','65.000','75.000','85.000','95.000','125.000','150.000 >'})
xlim([0 13]); %limits
ylim([0 45]);
title('Income ');
savefig('income');

修改

您可能希望将重新编码的变量保存到其他变量而不是原始变量中。