Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 是否可以在ggplot2中的单个时间序列图中绘制多条趋势线?_R_Ggplot2_Time Series_Data Visualization_Trendline - Fatal编程技术网

R 是否可以在ggplot2中的单个时间序列图中绘制多条趋势线?

R 是否可以在ggplot2中的单个时间序列图中绘制多条趋势线?,r,ggplot2,time-series,data-visualization,trendline,R,Ggplot2,Time Series,Data Visualization,Trendline,我计划在一个时间序列图中绘制几条趋势线,以便能够可视化跨越多个时间限制的趋势变化。我试图在整个时间序列中绘制一个单一的线性趋势,但我希望在2007年至2010年和2010年至2013年绘制更多的趋势,这将有助于我处理2007年至2010年之间的稳定趋势和2010年至2013年之间的下降模式。我使用了以下代码: data <- read.csv("sample.csv", header = T, sep

我计划在一个时间序列图中绘制几条趋势线,以便能够可视化跨越多个时间限制的趋势变化。我试图在整个时间序列中绘制一个单一的线性趋势,但我希望在2007年至2010年和2010年至2013年绘制更多的趋势,这将有助于我处理2007年至2010年之间的稳定趋势和2010年至2013年之间的下降模式。我使用了以下代码:

data <- read.csv("sample.csv",
                 header = T,
                 sep = ",",
                 dec = ".")
head(data)
data$Year <- as.Date(data$ï..Date, format = "%m/%d/%Y")
class(data$Year)
attach(data)
time_plot <- ggplot(data, aes(x = Year, y = SPM)) +
  geom_line(color = 'black', size = 1.3)  + geom_point(color = "blue", size = 1.3) +
  scale_x_date(date_labels = "%Y", date_breaks = "1 year") + xlab(label = "Time (Years)") + ylab(label = "Concentration") +
    theme_bw() + stat_smooth(
      method = "lm",
      formula = y ~ x,
      size = 0.75,
      se = T,
      color = "blue",
      fill = "#9AE5D7"
    ) + stat_poly_eq(
      face = "bold",
      parse = T,
      aes(label = ..eq.label..),
      formula = y ~ x,
      label.x.npc = 0.5,
      label.y.npc = 0.1,
      size = 6,
      coef.digits = 4
    ) +
    theme(
      plot.title = element_text(
        size = 17,
        face = "bold",
        colour = "black"
      ),
      axis.title.x = element_text(
        size = 20,
        face = "bold",
        colour = "black"
      ),
      axis.title.y = element_text(
        size = 20,
        face = "bold",
        colour = "black"
      ),
      axis.text.x = element_text(
        size = 18,
        face = "bold",
        colour = "black"
      ),
 
      axis.text.y = element_text(
        size = 18,
        face = "bold",
        colour = "black"
      ),
     
      strip.text.x = element_text(
        size = 16,
        
        face = "bold",
        colour = "black"
      ),
      strip.text.y = element_text(
        size = 16,
        
        face = "bold",
        colour = "black"
      ),
      axis.line.x = element_line(color = "black", size = 1),
      axis.line.y = element_line(color = "black", size = 1),
      axis.ticks = element_line(color = "black", size = 1.2),
      axis.ticks.length = unit(0.2, "cm"),
      panel.border = element_rect(
        colour = "black",
        fill = NA,
        size = 1
      ),
      legend.title = element_blank(),
      legend.position = c(.8, .2),
    ) +
    stat_fit_glance(
      method = 'lm',
      method.args = list(formula = y ~ x),
      geom = 'text',
      aes(label = paste(
        "P-value = ", signif(..p.value.., digits = 4), sep = ""
      )),
      size = 6,
      label.x = "left",
      label.y = "top",
    ) 

任何帮助、建议或建议都将不胜感激。提前感谢。

您只需使用原始数据帧的子集重复您的
geom_smooth
调用即可:

ggplot(数据,aes(x=Year,y=SPM))+
几何线(颜色=黑色,尺寸=1.3)+
几何点(颜色=“蓝色”,尺寸=1.3)+
统计平滑(method=“lm”,公式=y~x,大小=0.75,se=TRUE,
color=“blue”,fill=“#9AE5D7”)+
统计平滑(method=“lm”,公式=y~x,大小=0.75,se=TRUE,
color=“red”,fill=“red”,alpha=0.2,
数据=数据[数据$Year<截止日期(“2009-06-01”),])+
统计平滑(method=“lm”,公式=y~x,大小=0.75,se=TRUE,
color=“forestgreen”,fill=“forestgreen”,alpha=0.2,
数据=数据[数据$Year>=截止日期(“2009-06-01”),])+
stat_poly_eq(face=“bold”,parse=TRUE,aes(label=…eq.label.),
公式=y~x,label.x.npc=0.5,label.y.npc=0.1,
尺寸=6,系数数字=4)+
统计拟合(method='lm',method.args=list(formula=y~x),
geom='text',
aes(标签=粘贴(
“P-value=,signif(…P.value..,数字=4),sep=”
)),size=6,label.x=“left”,label.y=“top”)+
比例x日期(日期标签=“%Y”,日期间隔=“1年”)+
实验室(x=“时间(年)”,y=“浓度”)+
主题_bw()+
主题(plot.title=element_text(size=17,face=“bold”),
axis.title.x=元素\文本(大小=20,面=“粗体”),
axis.title.y=元素\文本(大小=20,face=“bold”),
axis.text.x=元素\文本(大小=18,面=“粗体”),
axis.text.y=元素\文本(大小=18,面=“粗体”),
strip.text.x=element\u text(大小=16,face=“bold”),
strip.text.y=元素\文本(大小=16,face=“bold”),
x轴=元素线(颜色=“黑色”,尺寸=1),
y轴=元素线(颜色=“黑色”,尺寸=1),
轴刻度=元素线(颜色=“黑色”,尺寸=1.2),
轴长度=单位(0.2,“厘米”),
panel.border=元素(填充=NA,大小=1),
legend.title=元素_blank(),
图例.位置=c(.8,.2))


在这种情况下,整体趋势是相当稳定的,因此背景蓝线被两个部分段遮住了。

非常感谢您的关注。但是,您是否介意我请您解释一下这一部分
data=data[data$Year
。您使用“2009”作为中间值在其两侧绘制趋势线。如果我对趋势有一个特定的上限和下限呢?例如,我想绘制2007年至2009年以及2011年至2013年的趋势图。对于这样的事情,我需要在代码中做哪些修改?@asheef_ik您可以做
data=data[data$Year>=as.Date(“2007-01-01”)&data$Year=as.Date(“2011-01-01”)&data$Year解决了这个问题,再次感谢。现在我已经画出了趋势,如果我能改变趋势的线条类型(如我文章中的一幅图片所示),似乎会更好到虚线或虚线点。我知道这可能与原始问题无关,你能帮我解决吗?@asheef_ik只需将
linetype=2
添加到
geom_smooth
调用中。你可以尝试不同的数字,看看适合什么。
ï..Date   SPM       Year
1   1/1/2007 6.412 2007-01-01
2   2/1/2007 7.827 2007-02-01
3   3/1/2007 6.816 2007-03-01
4   4/1/2007 8.021 2007-04-01
5   5/1/2007 6.130 2007-05-01
6   6/1/2007 4.982 2007-06-01
7   7/1/2007 3.776 2007-07-01
8   8/1/2007 4.764 2007-08-01
9   9/1/2007 5.699 2007-09-01
10 10/1/2007 7.264 2007-10-01
11 11/1/2007 8.168 2007-11-01
12 12/1/2007 7.518 2007-12-01
13  1/1/2008 7.157 2008-01-01
14  2/1/2008 7.996 2008-02-01
15  3/1/2008 5.806 2008-03-01
16  4/1/2008 5.388 2008-04-01
17  5/1/2008 6.535 2008-05-01
18  6/1/2008 3.715 2008-06-01
19  7/1/2008 4.723 2008-07-01
20  8/1/2008 4.259 2008-08-01
21  9/1/2008 5.524 2008-09-01
22 10/1/2008 7.755 2008-10-01
23 11/1/2008 8.393 2008-11-01
24 12/1/2008 5.702 2008-12-01
25  1/1/2009 5.816 2009-01-01
26  2/1/2009 5.954 2009-02-01
27  3/1/2009 5.142 2009-03-01
28  4/1/2009 6.286 2009-04-01
29  5/1/2009 7.408 2009-05-01
30  6/1/2009 5.866 2009-06-01
31  7/1/2009 7.188 2009-07-01
32  8/1/2009 3.729 2009-08-01
33  9/1/2009 4.284 2009-09-01
34 10/1/2009 6.392 2009-10-01
35 11/1/2009 6.642 2009-11-01
36 12/1/2009 6.365 2009-12-01
37  1/1/2010 6.999 2010-01-01
38  2/1/2010 6.906 2010-02-01
39  3/1/2010 6.205 2010-03-01
40  4/1/2010 3.497 2010-04-01
41  5/1/2010 2.278 2010-05-01
42  6/1/2010 3.510 2010-06-01
43  7/1/2010 4.112 2010-07-01
44  8/1/2010 5.469 2010-08-01
45  9/1/2010 5.402 2010-09-01
46 10/1/2010 5.365 2010-10-01
47 11/1/2010 6.412 2010-11-01
48 12/1/2010 7.384 2010-12-01
49  1/1/2011 7.660 2011-01-01
50  2/1/2011 7.380 2011-02-01
51  3/1/2011 7.880 2011-03-01
52  4/1/2011 5.971 2011-04-01
53  5/1/2011 6.944 2011-05-01
54  6/1/2011 3.911 2011-06-01
55  7/1/2011 4.438 2011-07-01
56  8/1/2011 3.266 2011-08-01
57  9/1/2011 4.554 2011-09-01
58 10/1/2011 7.247 2011-10-01
59 11/1/2011 7.607 2011-11-01
60 12/1/2011 7.791 2011-12-01
61  1/1/2012 9.193 2012-01-01
62  2/1/2012 7.312 2012-02-01
63  3/1/2012 3.753 2012-03-01
64  4/1/2012 3.458 2012-04-01
65  5/1/2012 1.211 2012-05-01
66  6/1/2012 2.052 2012-06-01
67  7/1/2012 2.055 2012-07-01
68  8/1/2012 3.804 2012-08-01
69  9/1/2012 5.728 2012-09-01
70 10/1/2012 6.501 2012-10-01
71 11/1/2012 5.177 2012-11-01
72 12/1/2012 4.829 2012-12-01