以下以简化的方式描述了我经常运行但从未使其工作的问题。它与叠加具有不同信息的图层有关。
感谢任何帮助。
library(dplyr)
library(ggplot2)
df = data.frame(id = c(1,1,1,1,2,2,2,3,3,3),
year = c(2000,2001,2002,2003,2000,2001,2002,2001,2002,2003),
meas = c(1.1,1.2,NA,1.4,2.1,1.9,1.8,3.1,3.0,3.3))
df$id = as.factor(df$id)
df$year = as.factor(df$year)
tib = as.tbl(df)
产生tibble的:
# A tibble: 10 x 3
id year meas
<fctr> <fctr> <dbl>
1 1 2000 1.1
2 1 2001 1.2
3 1 2002 NA
4 1 2003 1.4
5 2 2000 2.1
6 2 2001 1.9
7 2 2002 1.8
8 3 2001 3.1
9 3 2002 3.0
10 3 2003 3.3
目前,我计算了横截面中每年测量的中位数。
tib2 = tib %>% group_by(year) %>%
summarise(medi=median(meas,na.rm=T))
tib2
按预期给出
# A tibble: 4 x 2
year medi
<fctr> <dbl>
1 2000 1.60
2 2001 1.90
3 2002 2.40
4 2003 2.35
到目前为止一切顺利。现在,我创建了我的第一个情节
p = ggplot(tib, aes(x = year, y = meas, group = id, color = id))
p = p + geom_line()
p
产生
另一方面,下面会产生一组胖点,因为它应该
p1=ggplot(tib2, aes(x = year, y = medi)) + geom_point(colour = 'red', size = 3)
p1
我尝试将红点放在第一个图中,如下所示:
p = p + geom_point(data = tib2, aes(x = year, y = medi), colour = 'red', size = 3)
p
这是我收到错误的地方:
不知道如何自动选择类型函数对象的比例。违约持续。 错误(函数(...,row.names = NULL,check.rows = FALSE,check.names = TRUE, 这些论点意味着不同的行数:4,0
备注:我注意到缺失的值会引起红线的切割,我可能希望进行插值。当我将NA替换为某个值时,错误仍然存在。
答案 0 :(得分:2)
你可以尝试
ggplot(tib, aes(x = year, y = meas, group = id, color = id)) +
geom_line() +
stat_summary(fun.y = median, geom="point", aes(group=year), colour = 'red', size = 3)
或用作推荐的Dash2
ggplot() +
geom_line(data=tib, aes(x = year, y = meas, group = id, color = id)) +
geom_point(data = tib2, aes(x = year, y = medi), colour = 'red', size = 3)
答案 1 :(得分:2)
“类型函数的对象”错误与dplyr::id()
函数有关。
当您在ggplot
调用中指定美学时,它适用于所有绘图,并且在第一个geom in the
tib dataframe context, the
tib2`上下文中正确解释它时没有它,所以它会产生错误。
您可以将相关的aes
传递给单geom
,也可以在inherit.aes = FALSE
geom'上使用tib2
:
library(ggplot)
ggplot(tib) +
geom_line(aes(x = year, y = meas, group = id, color = id)) +
geom_point(data = tib2, aes(x = year, y = medi), size = 3, color = 'red')
ggplot(tib, aes(x = year, y = meas, group = id, color = id)) +
geom_line() +
geom_point(data = tib2, aes(x = year, y = medi), size = 3, color = 'red', inherit.aes = FALSE)
或者更优雅的是,请指定aes
来电中常见的ggplot
以及其他需要的地方:
ggplot(tib, aes(x = year)) +
geom_line(aes(y = meas, group = id, color = id)) +
geom_point(data = tib2, aes(y=medi), size = 3, color = 'red')
由reprex package(v0.2.0)创建于2018-05-08。