1)monthplot转换数据,以动物园(使用"yearmon"
类 - 我们还显示在评论的替代转换器),然后到"ts"
类,然后使用monthplot
(在R的基极)与"ts"
对象(或下面我们使用autoplot.zoo
(它使用ggplot2包)与动物园对象)。
library(zoo)
# to_yearmon <- function(x) as.yearmon((x %% 10000) + (x %/% 10000 - 1)/12)
to_yearmon <- function(x) as.yearmon(sub("(.*)(....)$", "\\2-\\1", x))
ser_zoo <- read.zoo(ser_df, FUN = to_yearmon) # convert to DF to zoo
ser_ts <- as.ts(ser_zoo) # convert zoo to ts
monthplot(ser_ts)
(剧情后继续)
2)autoplot.zoo我们展示了如何绘制(一)每年(2011年,2012一线,...)所有在一张图表中和(ii)在单独的小图中和(iii)在一张图表中每月一行(1,2,3,...)和(iv)单独的小组。
我们创建了一个数据框ser_df2
,其中3列代表月份,年份和系列值。然后我们将这个长表格系列转换成一个宽表格,ser_zoo2
,时间为1,2,3,...代表每年的月份和一列。我们还将这个长表格系列转换为一个广泛的表格,ser_zoo2
,其中2011年,2012年......代表每年的一年和一列。通过在单个面板和多个面板中绘制每个图表,我们得到2x2 = 4个图表,我们在下面显示。
library(ggplot2)
library(gridExtra)
ser_df2 <- data.frame(month = cycle(ser_zoo),
year = floor(as.numeric(time(ser_zoo))),
ser = coredata(ser_zoo))
ser_zoo2 <- read.zoo(ser_df2, index = 1, split = 2) # split into one column per year
p1 <- autoplot(ser_zoo2, facet = NULL)
p2 <- autoplot(ser_zoo2)
ser_zoo3 <- read.zoo(ser_df2, index = 2, split = 1) # split into one column per month
p3 <- autoplot(ser_zoo3, facet = NULL)
p4 <- autoplot(ser_zoo3)
grid.arrange(p1, p3, p2, p4, ncol = 2)
(点击图放大)
注:我们用这个作为输入数据帧ser_df
:
Lines <- "
yearMon V1
1 012011 2.534161
2 012012 1.818421
3 012013 1.635179
4 012014 1.609195
5 012015 1.794979
6 022011 3.408389
7 022012 1.756303
8 022013 1.577855
9 022014 1.511905
10 022015 1.748879
11 032011 2.664336
12 032012 1.912023
13 032013 1.408602
14 032014 1.646091
15 032015 1.705069
16 042011 2.532895
17 042012 3.342926
18 042013 3.056657
"
ser_df <- read.table(text = Lines)
我会建议你在几年和几个月内拆分第一列。然后,您可以使用月份列作为stat_summary的因子以按组绘制平均值。或者,您可以按其他因素(搜索聚合)在其他地方计算平均值,然后用新数据框创建一个ggplot –