【问题标题】:plot multiple XTS timeseries by day only仅按天绘制多个 XTS 时间序列
【发布时间】:2018-06-30 23:32:31
【问题描述】:

我对 R 中的绘图(时间序列)有疑问,希望有人能给我一些建议:

我有一个 R 项目(最新版本),我想将河流流出量与降水量和其他气候因素进行比较。我想按季节和/或月份来做这件事。但是,当我想绘制我的数据时,R 按月创建 X 轴。要将所有数据(月份)放在一个图中,我的想法是 x 轴显示月份的天数,而 y 轴显示升/秒。但是如何改变 R 关于 x 轴的行为呢?


这是我的示例数据(50 个数据集):

outflow = outflow_orig[sample(nrow(outflow_orig),50),]

show(outflow)
                datum liter_s
939        03.12.2012   16.40
422        31.01.2008   53.62
1373       18.02.2016   37.34
997        28.06.2013  117.20
719        30.07.2010   50.62
1253       09.06.2015   57.36
79         19.11.2004   21.62
1012       31.08.2013   60.28
745        08.11.2010   37.96
562        05.03.2009   77.28
15         27.12.2003   18.47
730        03.09.2010   45.93
1150       16.10.2014   18.47
460        12.06.2008   48.79
104     03.02.2005-na   26.66
504        20.11.2008   17.46
1048       11.01.2014   41.12
1241       09.05.2015   61.03
763        04.01.2011   49.47
1146       02.10.2014   18.47
1224       04.04.2015   66.36
909        19.07.2012   31.71
155        27.04.2005   75.87
147        12.04.2005   71.96
889        30.04.2012   59.35
268        09.06.2006   64.70
797        11.04.2011   59.65
932        02.11.2012   17.97
657        08.01.2010   41.93
113        11.12.2003   19.43
226        05.01.2006   26.31
396        06.11.2007   20.26
82         03.12.2004   20.35
1062       21.02.2014   39.29
299        09.11.2006   23.11
1264       09.07.2015   47.15
152  21.04.2005-17.15   81.40
665        11.02.2010   48.90
348        12.04.2007   53.17
407        11.12.2007   32.53
648        25.12.2009   36.46
785        24.02.2011   81.10
1331       01.12.2015   18.96
711        07.07.2010   46.40
498        31.10.2008   17.66
1489       26.10.2016   19.43
606        22.07.2009   46.85
496        23.10.2008   17.97
1120       18.08.2014   16.93
946        23.12.2012   23.47

创建一个 XTS 对象是因为有时我每天有两个测量值和数据集中的字符。

outflow.xts     <- apply.daily(xts(outflow$liter_s, order.by = strptime(outflow$datum, format = "%Y-%m-%d", tz = "")),"mean", na.rm=TRUE)
outflow.df <- data.frame(date=index(outflow.xts), coredata(outflow.xts))

str(outflow.df)
'data.frame':   1456 obs. of  2 variables:
 $ Datum     : Date, format: "2003-11-05" "2003-11-09" "2003-11-12" ...
 $ liter_s: num  19.9 19.9 23.5 19.4 19.4 ...

提取月份/季节:

january    = outflow.xts[.indexmon(outflow.xts) %in% c(0)]
summer     = outflow.xts[.indexmon(outflow.xts) %in% c(6,7,8)]

第二:气候数据:

klimadaten <- read.csv(file="Klimastation_Langensallach-2003-2016-LFL_Bayern.csv",header = TRUE,sep = ";", dec=".", stringsAsFactors = FALSE)
klimadaten$datum  = as.Date(klimadaten$datum, format("%d.%m.%Y"))
klimadaten[,2:7]  = apply(klimadaten[,2:7], 2, as.numeric)
# Remove NA    
klimadaten = klimadaten[complete.cases(klimadaten[, 6]),]

str(klimadaten)
'data.frame':   4580 obs. of  7 variables:
 $ datum          : Date, format: "2003-11-01" "2003-11-02" "2003-11-03" ...
 $ eistag         : num  0 0 0 0 0 0 0 0 0 0 ...
 $ frosttag       : num  0 0 0 0 0 0 0 0 0 1 ...
 $ temp_luft_2m   : num  6.52 5.43 7.77 7.9 6.04 5.2 3.94 5.63 5.28 1.46 ...
 $ niederschlag_mm: num  0.7 0.1 0.3 0 0 0 0 0 0 0.1 ...
 $ temp_boden_5cm : num  6.39 6.19 6.25 6.68 5.69 5.2 5.08 4.97 4.77 4.52 ...
 $ luftfeuchte_rel: num  91.9 87.7 82 83.8 81.7 ...

head(klimadaten)
       datum eistag frosttag temp_luft_2m niederschlag_mm temp_boden_5cm luftfeuchte_rel
1 2003-11-01      0        0         6.52             0.7           6.39           91.93
2 2003-11-02      0        0         5.43             0.1           6.19           87.73
3 2003-11-03      0        0         7.77             0.3           6.25           82.03
4 2003-11-04      0        0         7.90             0.0           6.68           83.84
5 2003-11-05      0        0         6.04             0.0           5.69           81.74
6 2003-11-06      0        0         5.20             0.0           5.20           68.53

现在我在 R 方面的真正基础知识结束了......我如何在一张图表中绘制流出月份,第二张如何绘制参考气候数据的季节和子集?

真的,感谢您的任何帮助和建议。

来自德国的亲切问候 萨沙

【问题讨论】:

  • 如果您提供a complete minimal reproducible example 来回答您的问题,我们更有可能为您提供帮助。我们可以从中工作并使用它来向您展示如何回答您的问题。用head() 显示数据很好,但我们不能轻易地拿起它并使用它来演示可能的解决方案。我还建议看看how do I ask a good question。证明你已经付出了一些努力通常是件好事。
  • 你好 Eric Fail,我唯一错过的是原始数据。我可以在这里放置一些原始数据:
  • 我认为链接在翻译中丢失了。并不是说建议制作 minimal 可重现的示例 [强调添加]。在构建可重现的示例时,经常会发现错误。至少这经常发生在我身上。

标签: r plot time-series xts


【解决方案1】:

我想我找到了解决问题的方法。功能 fortify() 帮助我从新数据框中的 XTS 中提取值和索引。使用 2 个值,我可以创建一个我所知道的情节。 这个问题现在可以“关闭”(如果可能的话)。 亲切的问候

【讨论】:

    猜你喜欢
    • 2015-04-03
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 2022-01-10
    • 2018-07-05
    相关资源
    最近更新 更多