我有一个csv文件,有四列(年,TMAX,TMEAN和TMIN),范围从1900年到2014年。在一个窗口中,我想制作3个TMAX,TMEAN和TMIN的折线图X轴年(1900:2014)。我还想要在图表中显示趋势线,并在图例中显示相关的r平方值。到目前为止,我已经编写了以下代码:
library(ggplot2)
library(reshape)
data=read.table("temp_red.csv",header=TRUE, sep=",")
frame=data.frame(data[1:4])
meltd=melt(frame,id.vars="Year")
matplot(frame[2:4], type = c("l"),col = 1:3)
ggplot(meltd, aes(x = time, y = value, colour = variable)) + geom_line()
Year TMAX TMEAN TMIN
1900 11.19989107 4.684640523 -1.837690632
1901 10.26497821 4.098583878 -2.074891068
1902 10.03077342 4.025054466 -1.99291939
1903 9.378540305 2.862472767 -3.651416122
1904 8.66040305 2.659313725 -3.351579521
1905 9.703703704 3.590686275 -2.534313725
1906 9.874455338 3.795479303 -2.290305011
2014 8.599673203 2.360566449 -3.88671024
我不知道如何使用r在图表中显示带有R平方值的趋势线。请帮忙。
答案 0 :(得分:3)
我相信以下内容适合您。在开始之前,请注意相关的讨论here和here。首先,我将产生一些输入:
library(dplyr)
library(ggplot2)
library(tidyr)
set.seed(1)
year <- 1990:2010
Tmax <- rnorm(21, 9)
Tmean <- rnorm(21, 3.5)
Tmin <- rnorm(21, -2)
df <- data.frame(year, Tmax, Tmean, Tmin)
df <- tbl_df(df)
df
Source: local data frame [21 x 4]
year Tmax Tmean Tmin
(int) (dbl) (dbl) (dbl)
1 1990 8.373546 4.282136 -1.303037
2 1991 9.183643 3.574565 -1.443337
3 1992 8.164371 1.510648 -2.688756
4 1993 10.595281 4.119826 -2.707495
5 1994 9.329508 3.443871 -1.635418
6 1995 8.179532 3.344204 -1.231467
7 1996 9.487429 2.029248 -2.112346
8 1997 9.738325 3.021850 -1.118892
9 1998 9.575781 3.917942 -1.601894
10 1999 8.694612 4.858680 -2.612026
.. ... ... ...
接下来,我将使用 tidyr 来准备用于绘图的数据:
df1 <- df %>% gather(key, Value, -year)
df1
Source: local data frame [63 x 3]
year key Value
(int) (fctr) (dbl)
1 1990 Tmax 8.373546
2 1991 Tmax 9.183643
3 1992 Tmax 8.164371
4 1993 Tmax 10.595281
5 1994 Tmax 9.329508
6 1995 Tmax 8.179532
7 1996 Tmax 9.487429
8 1997 Tmax 9.738325
9 1998 Tmax 9.575781
10 1999 Tmax 8.694612
.. ... ... ...
在绘图之前,我将提取绘图所需的R^2
值:
r2 <- df1 %>% group_by(key) %>%
do(mod = lm(Value ~ year, data = .)) %>%
mutate(r2sq = summary(mod)$r.squared) %>%
select(key, r2sq)
r2
Source: local data frame [3 x 2]
Groups: <by row>
key r2sq
(fctr) (dbl)
1 Tmax 0.03718175
2 Tmean 0.01216523
3 Tmin 0.02820540
现在的情节:
pl <- ggplot(df1, aes(x = year, y = Value, col = key)) + geom_line() +
geom_smooth(method = lm)
pl + geom_text(data = r2, aes(x= 2005, y = c(11, 5, 1),
label = paste0("R^2 : ", round(r2sq, 3))), parse = T,
col = "black", show.legend = F)
希望这有帮助。
答案 1 :(得分:1)
您可以使用stat_smooth
。使用meltd
数据框
ggplot(meltd, aes(x = Year, y = value, colour = variable)) +
geom_line() +
stat_smooth(method = lm)
修改强>
使用geom_smooth(method = lm)
也可以。