数据:每天记录一次身高
我想绘制植物的高度(植物A1-Z50) 在单个图中,我想突出显示当前年份。
所以我为当年(2018年)制作了每个植物的子集和一个子集
现在我需要一个总记录和2018年突出显示数据的图
dput(Plant)
structure(list(Name = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L,
3L, 3L, 3L), .Label = c("Plant A1", "Plant B1", "Plant C1"), class = "factor"),
Date = structure(c(1L, 4L, 5L, 7L, 1L, 4L, 6L, 1L, 2L, 3L
), .Label = c(" 2001-01-01", " 2001-01-02", " 2001-01-03",
" 2002-01-01", " 2002-02-01", " 2019-01-01", " 2019-12-31"
), class = "factor"), Height_cm = c(91, 106.1, 107.4, 145.9,
169.1, 192.1, 217.4, 139.8, 140.3, 140.3)), .Names = c("Name",
"Date", "Height_cm"), class = "data.frame", row.names = c(NA,
-10L))
Plant_A1 <- filter(Plant, Name == "Plant A1")
Current_Year <- as.numeric("2018")
Plant_A1_Subset <- filter(Plant_A1, format(Plant_A1$Date, '%Y') == Current_Year)
ggplot(data=Plant_A1,aes(x=Plant_A1$Date, y=Plant_A1$Heigth)) +
geom_point() +
geom_smooth(method="loes", level=0.95, span=1/2, color="red") +
labs(x="Data", y="Height cm")
现在我不知道如何将我的2018年新子集(Plant_A1_Subset)放入此图中。
答案 0 :(得分:0)
如前所述,此问题与this question中的答案重复。
这就是说,这可能是处理问题的最常用方法。
在ggplot2
中,将来的调用将继承传递到aes
函数的ggplot(aes(...))
中的所有参数。因此,除非将来手动覆盖参数,否则该图将始终在以后的ggplot
函数中使用这些参数。不过,我们可以通过在aes
的{{1}}中添加一个额外的参数来解决您的问题。下面,我说明了一种实现您可能正在寻找的简单方法。
第一种方法可能是最直观的。 geom_point
控制绘制的参数。因此,如果您想为某些点添加颜色,一种方法是让aes
和aes
参数是单独的。
geom_point
请注意,我已经使用了geom_smooth
参数的继承。简而言之,library(ggplot2)
library(lubridate) #for month(), year(), day() functions
current_year <- 2018
ggplot(data = Plant_A1, aes(x = Date, y = Heigth)) +
#Note here, colour set in geom_point
geom_point(aes(col = ifelse(year(Date) == current_year, "Yes", "No"))) +
geom_smooth(method="loess", level=0.95,
span=1/2, color="red") +
labs(x="Data", y="Height cm",
col = "Current year?") #Specify legend title for colour
将检查aes
中的名称,如果可以找到它,则将其用作变量。因此,无需指定aes
。