下面以一种简化的方式描述了一个我经常遇到但从未解决过的问题,它与叠加具有不同信息的层有关。
任何帮助都很感激。
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
这是我得到错误的地方:
不知道如何为函数类型的对象自动选取小数位数。默认为连续。(function(...,row.names = NULL,check.rows = FALSE,check.names = TRUE中出错,参数表示不同的行数:4、0
备注:我注意到缺失的数值会在红线上产生一个切口,我可能希望用插值法来代替。当我用某个数值代替NA时,错误仍然存在。
2条答案
按热度按时间ghhkc1vu1#
“函数类型的对象”错误与
dplyr::id()
函数有关。当您在
ggplot
调用中指定美学时,它将应用于所有绘图,并且虽然它在tib
Dataframe 上下文中的第一个geom中被正确解释,但tib2
上下文中没有它,因此它产生错误。您可以将相关的
aes
传递给单个geom
,或者可以在“tib2
geom”上使用inherit.aes = FALSE
:或者更优雅地指定
ggplot
调用中常用的aes
,以及其他需要的aes
:由reprex package(v0.2.0)于2018年5月8日创建。
vd2z7a6w2#
你可以试试
或按Dash2建议使用