【问题标题】:How to plot a mean monthly data from a daily time series如何从每日时间序列中绘制平均每月数据
【发布时间】:2015-01-07 17:42:03
【问题描述】:

我有一系列从 1976 年 1 月 1 日到 2001 年 12 月 31 日的每日降雨量的预测和观测数据。我想将它们绘制成从 1 月到 2 月到 12 月的平均每月图表。你能告诉我如何在 Excel 或 Matlab 中做到这一点吗?非常感谢!

每日数据

我希望它是这样的:

【问题讨论】:

  • 你有每天的价值观吗?是否有两列,一列是日期,一列是降雨量?你能提供一个数据集的样本吗?顺便说一句:如何预测负降水?好像气象学家一直在抽烟……=P
  • 另外,您可以发布几行数据作为示例吗?假设日期采用您提到的格式:在 Excel 中,您可以创建一个新的“月份”列,其中包含日期的前三个字符(使用左命令),然后创建一个以月份列作为“轴”的数据透视图” 并将您的降雨列作为“值”(按平均值汇总)。
  • 我在该文件中没有看到任何日期,只有预测值和观察值
  • 对不起,我刚刚修改了。请再次检查,感谢您的支持

标签: matlab plot


【解决方案1】:

首先,您需要找出每个日期的月份。从您的链接数据来看,您可以做一些简单但(我认为)很慢的事情:

for i = 1:last_index
    % use automatic date overflow of datevec() func
    ldate = datevec(datenum(1976, 1, i))
    month = ldate(2);

从那时起,您可以通过将每个月与其各自的索引(即一月 = 1、二月 = 2 等)相关联,将观测数据和预测数据分配给月份。

之后,您可以使用bar() 函数绘制每个月的竖线。

编辑:好的,这里还有一些代码。我假设您的数据采用predicted observed 的形式,并且驻留在一个名为rainData 的向量中。

% create matrix for per-month data
monthlyData = zeros(12, 2);
% create matrix for month occurences
months = zeros(12, 1);

for i = 1:length(rainData)
    % use automatic date overflow of datevec() func
    ldate = datevec(datenum(1976, 1, i))
    month = ldate(2);

    % update month occurences
    months(month) = months(month) + 1;

    % update observed sum 
    monthlyData(month, :) = monthData(month, :) + rainData(i, :);
end

% extract means for each month
% dividing the sum of rain values for each month with the month's occurences
for i = 1:12
    monthlyData(i, :) = monthlyData(i, :) / months(i);
end

此时,monthlyData 是 12x2 数组,其中每一行对应一个月,格式为 [predictedValue observedValue]。使用bar(monthlyData) 绘制类似直方图的图形。

另外,如果您无法理解上述索引,请查看Matrices and Arrays Tutorial

【讨论】:

  • 非常感谢您的回复。我不擅长 Matlab,所以很难理解这段代码,但如果你能再次重写,那对我来说可能会更好。如果可以的话,甚至可以在 Excel 中进行。
  • 对不起,我不用excel。主要思想是使用数据索引作为datenum结构中的day字段。从那里,datevec() 将处理溢出,即datevec(datenum(1976, 1, 366)) 将评估为 1977-1-1-0-0,让您自动获取月份字段。我将在几分钟后发布更多代码作为起点。
  • 亲爱的 VHarisop!我运行了您提供的代码,但直到替换错误,例如它无法识别“monthlyData(month,:)”的此功能。你能再花点时间看一下这段代码吗?非常感谢!
猜你喜欢
  • 2015-07-06
  • 1970-01-01
  • 2021-09-06
  • 2020-10-31
  • 2019-10-13
  • 1970-01-01
  • 2016-06-29
  • 1970-01-01
  • 2012-08-07
相关资源
最近更新 更多