【问题标题】:plotting the mean and standard deviation of data when there is more than one piece of data collected at a particular point当在特定点收集到多个数据时,绘制数据的均值和标准差
【发布时间】:2014-02-12 14:07:53
【问题描述】:

我有一个矩阵,一列是一年中的哪一天,另一列是与一年中的那一天相关的数据。在一年中的某些日子有多个数据点,而其他日子有一个或没有。这使得绘制信息变得困难,我想做的是根据数据的均值和标准差绘制数据。因此,如果在一年中的第 320 天收集了 3 次数据,则将找出这三个数据点的平均值和标准差,然后在绘制时,平均线将穿过平均值,标准差将代表误差线。所以只说数据是:

DOY     DATA

30,     12

30,     10

30,     8

120,    6

110,    5

我想把它改成:

DOY   DATA   STD

30,   10,     2

120,   6,      0

110,   5,      0

然后我希望用代表误差线的标准偏差来绘制这些数据。 我该怎么办?

谢谢

【问题讨论】:

  • 请提供您的数据矩阵的模拟示例
  • 编辑了我的问题以包含一个示例,谢谢
  • 为什么是370 而不是30??
  • 对不起,我的意思是 30!感谢您的接机!

标签: matlab plot mean standard-deviation


【解决方案1】:

您可以使用 Matlab 的dataset 轻松分组 -

>> doy = [30 30 30 120 110]';
>> data = [12 10 8 6 5]';

下一行创建一个包含两列的dataset 对象,分别称为“doy”和“data”

>> ds = dataset(doy, data);

这一行表示计算组统计,使用“doy”作为分组变量,并计算每个组的均值和标准差。它还为您提供GroupCount 列中每个组中的变量数。

>> grpstats(ds, 'doy', {'mean', 'std'})
ans =
           doy    GroupCount    mean_data    std_data
    30      30    3             10           2       
    110    110    1              5           0       
    120    120    1              6           0       

【讨论】:

    【解决方案2】:

    您也可以使用accumarray,尤其是在您没有统计工具箱的情况下:

    doy = [30 30 30 120 110]';
    data = [12 10 8 6 5]';
    
    [~,ind,subs] = unique(DOY);
    
    means = accumarray(subs, data, size(ind), @mean);
    stds = accumarray(subs, data, size(ind), @std);
    
    final = [DOY(ind), means, stds]
    

    【讨论】:

      猜你喜欢
      • 2013-11-22
      • 2021-08-07
      • 2020-11-21
      • 2021-07-01
      • 1970-01-01
      • 2022-07-05
      • 1970-01-01
      • 2020-03-25
      • 2017-10-17
      相关资源
      最近更新 更多