R 相互叠加绘制多个年度时间序列
我有一个数据框架,包含31个观测站的各种气候测量的每日观测结果,这些都是影响因素。每个台站都有多年的每日观测值,每个台站都有唯一的记录年数和唯一的观测值 例如数据,我将其细分为13个观测站,每个独特的水资源年观测一次R 相互叠加绘制多个年度时间序列,r,ggplot2,R,Ggplot2,我有一个数据框架,包含31个观测站的各种气候测量的每日观测结果,这些都是影响因素。每个台站都有多年的每日观测值,每个台站都有唯一的记录年数和唯一的观测值 例如数据,我将其细分为13个观测站,每个独特的水资源年观测一次 NAME DATE PRCP calendar_year month day water_year water_date <fct> <d
NAME DATE PRCP calendar_year month day water_year water_date
<fct> <date> <dbl> <fct> <int> <int> <fct> <date>
102 FLORENCE 0.2 SSE, OR US 2007-12-05 0 2007 12 5 2007 2006-12-05
103 FLORENCE 0.2 SSE, OR US 2008-10-01 0 2008 10 1 2008 2007-10-01
104 FLORENCE 0.2 SSE, OR US 2009-12-16 0.9 2009 12 16 2009 2008-12-16
105 FLORENCE 0.2 SSE, OR US 2010-10-19 0 2010 10 19 2010 2009-10-19
106 FLORENCE 0.2 SSE, OR US 2012-07-10 0 2012 7 10 2012 2012-07-10
107 FLORENCE 0.5 NE, OR US 2007-12-12 0 2007 12 12 2007 2006-12-12
108 FLORENCE 0.5 NE, OR US 2008-01-01 0 2008 1 1 2008 2008-01-01
109 FLORENCE 0.6 E, OR US 2008-01-01 0 2008 1 1 2008 2008-01-01
110 FLORENCE 0.9 NW, OR US 2007-12-22 0.09 2007 12 22 2007 2006-12-22
111 FLORENCE 0.9 NW, OR US 2008-10-01 0 2008 10 1 2008 2007-10-01
112 FLORENCE 0.9 NW, OR US 2009-10-01 0.02 2009 10 1 2009 2008-10-01
113 FLORENCE 0.9 NW, OR US 2010-10-01 0.03 2010 10 1 2010 2009-10-01
114 FLORENCE 0.9 NW, OR US 2011-10-01 0.02 2011 10 1 2011 2010-10-01
115 FLORENCE 0.9 NW, OR US 2012-10-01 0 2012 10 1 2012 2011-10-01
116 FLORENCE 0.9 NW, OR US 2013-10-01 0.92 2013 10 1 2013 2012-10-01
117 FLORENCE 0.9 NW, OR US 2014-10-01 0.01 2014 10 1 2014 2013-10-01
118 FLORENCE 0.9 NW, OR US 2015-10-01 0 2015 10 1 2015 2014-10-01
119 FLORENCE 0.9 NW, OR US 2016-10-01 0.15 2016 10 1 2016 2015-10-01
120 FLORENCE 0.9 NW, OR US 2017-10-01 0.2 2017 10 1 2017 2016-10-01
121 FLORENCE 0.9 NW, OR US 2018-01-01 0 2018 1 1 2018 2018-01-01
122 FLORENCE 1.8 NW, OR US 2007-12-14 0 2007 12 14 2007 2006-12-14
123 FLORENCE 1.8 NW, OR US 2008-10-01 0 2008 10 1 2008 2007-10-01
124 FLORENCE 1.8 NW, OR US 2009-10-25 0 2009 10 25 2009 2008-10-25
125 FLORENCE 1.8 NW, OR US 2010-10-05 0.01 2010 10 5 2010 2009-10-05
126 FLORENCE 1.8 NW, OR US 2011-10-01 0.02 2011 10 1 2011 2010-10-01
127 FLORENCE 1.8 NW, OR US 2012-10-02 0 2012 10 2 2012 2011-10-02
128 FLORENCE 1.8 NW, OR US 2013-10-01 0.570 2013 10 1 2013 2012-10-01
129 FLORENCE 1.8 NW, OR US 2014-10-01 0.02 2014 10 1 2014 2013-10-01
130 FLORENCE 1.8 NW, OR US 2015-10-01 0.02 2015 10 1 2015 2014-10-01
131 FLORENCE 1.8 NW, OR US 2016-10-01 0.08 2016 10 1 2016 2015-10-01
132 FLORENCE 1.8 NW, OR US 2017-10-01 0.23 2017 10 1 2017 2016-10-01
133 FLORENCE 1.8 NW, OR US 2018-01-01 0.01 2018 1 1 2018 2018-01-01
134 FLORENCE 2.1 NNW, OR US 2007-12-17 0.96 2007 12 17 2007 2006-12-17
135 FLORENCE 2.1 NNW, OR US 2008-10-01 0 2008 10 1 2008 2007-10-01
136 FLORENCE 2.1 NNW, OR US 2009-10-01 0 2009 10 1 2009 2008-10-01
137 FLORENCE 2.1 NNW, OR US 2010-10-01 0.03 2010 10 1 2010 2009-10-01
138 FLORENCE 2.1 NNW, OR US 2011-10-01 0 2011 10 1 2011 2010-10-01
139 FLORENCE 2.1 NNW, OR US 2012-10-01 0 2012 10 1 2012 2011-10-01
140 FLORENCE 2.1 NNW, OR US 2013-12-26 0 2013 12 26 2013 2012-12-26
141 FLORENCE 2.1 NNW, OR US 2014-10-07 0 2014 10 7 2014 2013-10-07
142 FLORENCE 2.1 NNW, OR US 2016-05-21 0 2016 5 21 2016 2016-05-21
143 FLORENCE 2.1 NNW, OR US 2017-12-26 0 2017 12 26 2017 2016-12-26
144 FLORENCE 2.9 NNW, OR US 2007-12-16 0.07 2007 12 16 2007 2006-12-16
145 FLORENCE 2.9 NNW, OR US 2008-10-01 0 2008 10 1 2008 2007-10-01
146 FLORENCE 2.9 NNW, OR US 2009-10-01 0.03 2009 10 1 2009 2008-10-01
147 FLORENCE 2.9 NNW, OR US 2010-10-02 0.05 2010 10 2 2010 2009-10-02
148 FLORENCE 2.9 NNW, OR US 2011-10-01 0.02 2011 10 1 2011 2010-10-01
149 FLORENCE 2.9 NNW, OR US 2012-10-02 0 2012 10 2 2012 2011-10-02
150 FLORENCE 2.9 NNW, OR US 2013-10-01 0.580 2013 10 1 2013 2012-10-01
151 FLORENCE 2.9 NNW, OR US 2014-10-01 0.02 2014 10 1 2014 2013-10-01
152 FLORENCE 2.9 NNW, OR US 2015-10-01 0 2015 10 1 2015 2014-10-01
153 FLORENCE 2.9 NNW, OR US 2016-10-04 0.580 2016 10 4 2016 2015-10-04
154 FLORENCE 2.9 NNW, OR US 2017-10-01 0.2 2017 10 1 2017 2016-10-01
155 FLORENCE 2.9 NNW, OR US 2018-01-01 0 2018 1 1 2018 2018-01-01
156 FLORENCE 5.4 N, OR US 2007-12-22 0.03 2007 12 22 2007 2006-12-22
157 FLORENCE 5.4 N, OR US 2008-10-01 0 2008 10 1 2008 2007-10-01
158 FLORENCE 5.4 N, OR US 2009-10-01 0.07 2009 10 1 2009 2008-10-01
159 FLORENCE 5.4 N, OR US 2010-10-01 0.03 2010 10 1 2010 2009-10-01
160 FLORENCE 5.4 N, OR US 2011-10-03 0.65 2011 10 3 2011 2010-10-03
161 FLORENCE 5.4 N, OR US 2012-10-01 0 2012 10 1 2012 2011-10-01
162 FLORENCE 5.4 N, OR US 2013-10-01 0.6 2013 10 1 2013 2012-10-01
163 FLORENCE 5.4 N, OR US 2014-10-01 0 2014 10 1 2014 2013-10-01
164 FLORENCE 5.4 N, OR US 2015-10-01 0 2015 10 1 2015 2014-10-01
165 FLORENCE 5.4 N, OR US 2016-11-01 0.21 2016 11 1 2016 2015-11-01
166 FLORENCE 5.4 N, OR US 2017-11-11 0.9 2017 11 11 2017 2016-11-11
167 FLORENCE 5.4 N, OR US 2018-01-01 0 2018 1 1 2018 2018-01-01
168 FLORENCE 5.4 S, OR US 2007-12-08 0.42 2007 12 8 2007 2006-12-08
169 FLORENCE 5.4 S, OR US 2008-10-01 0 2008 10 1 2008 2007-10-01
170 FLORENCE 5.4 S, OR US 2009-10-01 0 2009 10 1 2009 2008-10-01
171 FLORENCE 5.4 S, OR US 2010-10-01 0.03 2010 10 1 2010 2009-10-01
172 FLORENCE 5.4 S, OR US 2011-10-01 0 2011 10 1 2011 2010-10-01
173 FLORENCE 5.4 S, OR US 2012-10-01 0 2012 10 1 2012 2011-10-01
174 FLORENCE 5.4 S, OR US 2013-10-01 0.6 2013 10 1 2013 2012-10-01
175 FLORENCE 5.4 S, OR US 2014-10-02 0 2014 10 2 2014 2013-10-02
176 FLORENCE 5.4 S, OR US 2015-01-01 0 2015 1 1 2015 2015-01-01
177 FLORENCE 5.8 S, OR US 2007-12-01 0.02 2007 12 1 2007 2006-12-01
178 FLORENCE 5.8 S, OR US 2008-10-01 0 2008 10 1 2008 2007-10-01
179 FLORENCE 5.8 S, OR US 2009-10-01 0.02 2009 10 1 2009 2008-10-01
180 FLORENCE 5.8 S, OR US 2010-10-01 0.01 2010 10 1 2010 2009-10-01
181 FLORENCE 5.8 S, OR US 2011-10-01 0 2011 10 1 2011 2010-10-01
182 FLORENCE 5.8 S, OR US 2012-10-01 0 2012 10 1 2012 2011-10-01
183 FLORENCE 5.8 S, OR US 2013-10-01 0.75 2013 10 1 2013 2012-10-01
184 FLORENCE 5.8 S, OR US 2014-01-01 0 2014 1 1 2014 2014-01-01
185 FLORENCE 5.9 NNE, OR US 2007-11-29 0.41 2007 11 29 2007 2006-11-29
186 FLORENCE 5.9 NNE, OR US 2008-10-03 0.39 2008 10 3 2008 2007-10-03
187 FLORENCE 5.9 NNE, OR US 2009-10-01 0.01 2009 10 1 2009 2008-10-01
188 FLORENCE 5.9 NNE, OR US 2010-10-01 0.05 2010 10 1 2010 2009-10-01
189 FLORENCE 5.9 NNE, OR US 2011-10-01 0.02 2011 10 1 2011 2010-10-01
190 FLORENCE 5.9 NNE, OR US 2012-10-01 0 2012 10 1 2012 2011-10-01
191 FLORENCE 5.9 NNE, OR US 2013-10-01 0.43 2013 10 1 2013 2012-10-01
192 FLORENCE 5.9 NNE, OR US 2014-10-01 0 2014 10 1 2014 2013-10-01
193 FLORENCE 5.9 NNE, OR US 2015-10-10 0.69 2015 10 10 2015 2014-10-10
194 FLORENCE 5.9 NNE, OR US 2016-10-01 0.11 2016 10 1 2016 2015-10-01
195 FLORENCE 5.9 NNE, OR US 2017-01-01 0.24 2017 1 1 2017 2017-01-01
196 FLORENCE 6 N, OR US 2007-11-19 0.04 2007 11 19 2007 2006-11-19
197 FLORENCE 6 N, OR US 2008-10-01 0 2008 10 1 2008 2007-10-01
198 FLORENCE 6 N, OR US 2009-10-01 0 2009 10 1 2009 2008-10-01
199 FLORENCE 6 N, OR US 2010-01-01 0.7 2010 1 1 2010 2010-01-01
200 FLORENCE NUMBER 2, OR US 2006-10-01 0 2006 10 1 2006 2005-10-01
201 FLORENCE NUMBER 2, OR US 2007-10-01 0 2007 10 1 2007 2006-10-01
202 FLORENCE NUMBER 2, OR US 2008-10-01 0 2008 10 1 2008 2007-10-01
203 FLORENCE NUMBER 2, OR US 2009-10-01 0 2009 10 1 2009 2008-10-01
204 FLORENCE NUMBER 2, OR US 2010-10-01 0.04 2010 10 1 2010 2009-10-01
205 FLORENCE NUMBER 2, OR US 2011-10-01 0.9 2011 10 1 2011 2010-10-01
206 FLORENCE NUMBER 2, OR US 2012-10-01 0 2012 10 1 2012 2011-10-01
207 FLORENCE NUMBER 2, OR US 2013-10-01 0.46 2013 10 1 2013 2012-10-01
208 FLORENCE NUMBER 2, OR US 2014-10-01 0 2014 10 1 2014 2013-10-01
209 FLORENCE NUMBER 2, OR US 2015-10-01 0 2015 10 1 2015 2014-10-01
210 FLORENCE NUMBER 2, OR US 2016-10-01 0.77 2016 10 1 2016 2015-10-01
211 FLORENCE NUMBER 2, OR US 2017-10-01 0.06 2017 10 1 2017 2016-10-01
212 FLORENCE NUMBER 2, OR US 2018-01-01 0 2018 1 1 2018 2018-01-01
213 FLORENCE, OR US 1909-10-01 0.580 1909 10 1 1909 1908-10-01
214 FLORENCE, OR US 1910-10-01 0.49 1910 10 1 1910 1909-10-01
215 FLORENCE, OR US 1911-10-01 0.03 1911 10 1 1911 1910-10-01
216 FLORENCE, OR US 1912-10-01 0.07 1912 10 1 1912 1911-10-01
217 FLORENCE, OR US 1913-10-01 0 1913 10 1 1913 1912-10-01
218 FLORENCE, OR US 1914-10-01 0.24 1914 10 1 1914 1913-10-01
219 FLORENCE, OR US 1915-10-01 0.25 1915 10 1 1915 1914-10-01
220 FLORENCE, OR US 1916-10-01 0.03 1916 10 1 1916 1915-10-01
221 FLORENCE, OR US 1917-10-01 0 1917 10 1 1917 1916-10-01
222 FLORENCE, OR US 1918-10-01 0 1918 10 1 1918 1917-10-01
223 FLORENCE, OR US 1919-10-01 0.6 1919 10 1 1919 1918-10-01
224 FLORENCE, OR US 1920-10-01 1.22 1920 10 1 1920 1919-10-01
225 FLORENCE, OR US 1921-10-01 0 1921 10 1 1921 1920-10-01
226 FLORENCE, OR US 1922-10-01 0.03 1922 10 1 1922 1921-10-01
227 FLORENCE, OR US 1949-12-08 0 1949 12 8 1949 1948-12-08
228 FLORENCE, OR US 1950-10-01 0 1950 10 1 1950 1949-10-01
229 FLORENCE, OR US 1951-01-01 0.32 1951 1 1 1951 1951-01-01
230 FLORENCE, OR US 2004-10-01 0 2004 10 1 2004 2003-10-01
231 FLORENCE, OR US 2005-10-01 0.88 2005 10 1 2005 2004-10-01
232 FLORENCE, OR US 2006-10-01 0 2006 10 1 2006 2005-10-01
233 FLORENCE, OR US 2007-10-01 0.33 2007 10 1 2007 2006-10-01
234 FLORENCE, OR US 2008-10-01 0 2008 10 1 2008 2007-10-01
235 FLORENCE, OR US 2009-10-01 0 2009 10 1 2009 2008-10-01
236 FLORENCE, OR US 2010-10-01 0.04 2010 10 1 2010 2009-10-01
237 FLORENCE, OR US 2011-10-01 0.75 2011 10 1 2011 2010-10-01
238 FLORENCE, OR US 2012-10-02 0 2012 10 2 2012 2011-10-02
239 FLORENCE, OR US 2013-10-01 0.63 2013 10 1 2013 2012-10-01
240 FLORENCE, OR US 2014-10-01 0 2014 10 1 2014 2013-10-01
241 FLORENCE, OR US 2015-10-01 0 2015 10 1 2015 2014-10-01
242 FLORENCE, OR US 2016-10-01 0.16 2016 10 1 2016 2015-10-01
243 FLORENCE, OR US 2017-01-01 0.53 2017 1 1 2017 2017-01-01
此代码将为一年的数据生成一个绘图,而所需的输出将为该名称的每一年可用数据生成一个点/平滑组
我正在寻找一种方法来自动创建这些图中的每一个,并输出每个名称的一个图,带有PRCP x water_date,按water_year分组
做这种事情最优雅、最标准的方式是什么?我是一个编程新手,对于如何以编程的方式实现这一点有些困惑,更不用说在R中了
更新#1(改进示例数据和问题)
更新#3(解决方案) 冻糕的解决方案效果很好。它可以与类似于上述代码的代码一起使用,以输出类似于以下内容的绘图:
< P>由于在年度期间需要相同的X轴日期,请考虑将水年中的所有年份更新为当前没有行保持的2099年- 2100年。 然后使用
by
(通过一个或多个因子将数据帧分割成更小子集的函数)为每个不同的名称生成绘图列表。要忽略2099,请使用比例
库绘制月份和日期:%b-%d
(月名)%m-%d
(月号)。此外,将“通过水”作为图例系列的填充因子
library(ggplot2)
library(scales)
...
# TEMP HELPER VARIABLE
df$wt_date_char <- as.character(df$water_date)
# REPLACE EVERY YEAR FOR 2099 OR 2100
# CONDITIONALLY UPDATE YEAR BY MONTH NUMEBR
df$pseudo_water_date <- ifelse(substr(df$wt_date_char, 6, 7) %in% paste0("0", as.character(seq(1,9))),
gsub("^(.*?)\\-", "2099-", df$wt_date_char),
gsub("^(.*?)\\-", "2100-", df$wt_date_char)
)
df$pseudo_water_date <- as.Date(df$pseudo_water_date, origin="1970-01-01")
df$wt_date_char <- NULL
# BUILD PLOT LIST
plot_list <- by(srb_clean, srb_clean$NAME, function(sub)
ggplot(sub, aes(pseudo_water_date, PRCP, fill=factor(water_year))) +
geom_point(na.rm=TRUE) +
geom_smooth(colour = "red", size = 1) +
ggtitle(sub$NAME[[1]]) +
labs(title="Water Year", x="Water Date", y="Precipitation") +
theme(plot.title = element_text(hjust = 0.5)) +
scale_x_date(labels = date_format("%b-%d"))
)
# OUTPUT INDIVIDUAL PLOTS
plot_list[[1]]
plot_list[[2]]
plot_list[[3]]
...
# OUTPUT ALL PLOTS
plot_list
库(ggplot2)
图书馆(比例尺)
...
#临时辅助变量
df$wt_date_char您应该更仔细地了解ggplot是如何工作的。特别是要考虑<代码> AES组< /代码>,并使用它来逐年分组,以及<代码> FAXETGRIDGE/<代码>对每个站点进行绘图。这是基本的ggplot,在发布前做一些研究。在寻求解决方案之前,还要尝试实施一些东西。祝你好运;)在ggplot中,这将是一项相对直接的任务——一个可复制的示例将有所帮助。最困难的部分是使x轴的范围从1月1日到12月31日——您必须将月份+日期从water_date中去掉,并创建一个新列,其中日期在虚拟年份内,如中所做。之后,只需将数据帧输入ggplot,x=新的虚拟日期,y=PRCP,按日历年分组,并按站点(而不是面网格)进行面包装。请使用dput()
(而不是str
或head
或图片/屏幕截图)共享您的数据样本,以便其他人可以提供帮助。在这里查看更多您是否也可以发布或绘制所需的输出图?@ClaytonGlasser:您需要使用dput()
来共享数据。上表不便于助手使用。NAME
列甚至包含许多空格。这非常好,谢谢。这只在一个方面起作用。通过将所有的水年日期转换为年份=2099(使我能够将它们全部绘制在同一个年表上),我失去了将图表运行到10月至11月的能力(因为一个完整的水年包含9个月,与去年的日历年相同,因此“开始”于10月)。您如何建议使用这种方法强制图表运行10-11月(例如10-01-2000--09-01-2001)?请参阅更新的答案添加有条件的ifelse
分配,其中10、11、12个月更新为2099个月,其他所有月份1-9更新为2100个月,一年后。为了清楚起见,我使用了一个新变量来作图:pseudo_water_date。我一直在尝试实现这段代码,发现它可以将pseudo_water_date中的所有年份转换为2100年,而不仅仅是1-9个月。我仔细审查了ifelse/substr/gsub代码的各个方面;这一切都是有道理的,我没有看到任何错误。你对它为什么不起作用有什么见解吗?IF语句没有被触发吗?哎哟!逻辑应该调整。参见编辑,将seq(10,12)
更改为seq(1,9)
。啊,是的,正确。与反转gsub逻辑(切换2100和2099)相结合,可以得到预期的结果。谢谢@巴菲
library(ggplot2)
library(scales)
...
# TEMP HELPER VARIABLE
df$wt_date_char <- as.character(df$water_date)
# REPLACE EVERY YEAR FOR 2099 OR 2100
# CONDITIONALLY UPDATE YEAR BY MONTH NUMEBR
df$pseudo_water_date <- ifelse(substr(df$wt_date_char, 6, 7) %in% paste0("0", as.character(seq(1,9))),
gsub("^(.*?)\\-", "2099-", df$wt_date_char),
gsub("^(.*?)\\-", "2100-", df$wt_date_char)
)
df$pseudo_water_date <- as.Date(df$pseudo_water_date, origin="1970-01-01")
df$wt_date_char <- NULL
# BUILD PLOT LIST
plot_list <- by(srb_clean, srb_clean$NAME, function(sub)
ggplot(sub, aes(pseudo_water_date, PRCP, fill=factor(water_year))) +
geom_point(na.rm=TRUE) +
geom_smooth(colour = "red", size = 1) +
ggtitle(sub$NAME[[1]]) +
labs(title="Water Year", x="Water Date", y="Precipitation") +
theme(plot.title = element_text(hjust = 0.5)) +
scale_x_date(labels = date_format("%b-%d"))
)
# OUTPUT INDIVIDUAL PLOTS
plot_list[[1]]
plot_list[[2]]
plot_list[[3]]
...
# OUTPUT ALL PLOTS
plot_list