我的数据只有两列:
Name Id
Joy 5
Alo 6
Aho 4
Joy 3
Alo 2
Aho 1
如果我想绘制带有错误栏的折线图,并用名称将它们分组:
我用这个:
data_summary <- function(data, varname, groupnames){
require(plyr)
summary_func <- function(x, col){
c(mean = mean(x[[col]], na.rm=TRUE),
#sd = sd(x[[col]], na.rm=TRUE))
}
data_sum<-ddply(data, groupnames, .fun=summary_func,
varname)
data_sum <- rename(data_sum, c("mean" = varname))
return(data_sum)
}
但是它给了我这个错误
错误:所有参数都必须命名为Call
rlang::last_error()
才能看到 backtrace调用自:abort(“所有参数必须命名”)
df2 <- data_summary(df, varname="Id",
groupnames=c("Name")
ggplot(df2, aes(x=Name, y=Id, group=keyword)) +
geom_line()+
geom_pointrange(aes(ymin=Id-sd, ymax=Ido+sd))
请有人帮助绘制此数据的错误栏
答案 0 :(得分:0)
正如 Tung 所评论的那样,将来请以某种格式包括您的数据,以便其他人可以复制/粘贴以制作可复制的示例。
df <- data.frame(Name = c("Joy", "Alo", "Aho", "Joy", "Alo", "Aho"), Id = c(5,6,4,3,2,1))
library(plyr)
library(ggplot2)
data_summary <- function(data, varname, groupnames){
summary_func <- function(x, col){
c(mean = mean(x[[col]], na.rm=TRUE),
sd = sd(x[[col]], na.rm=TRUE))
}
data_sum<-ddply(data, groupnames, .fun=summary_func,
varname)
data_sum <- rename(data_sum, c("mean" = varname))
return(data_sum)
}
df2 <- data_summary(df, varname="Id",
groupnames=c("Name"))
ggplot(df2, aes(x=Name, y=Id)) +
geom_line()+
geom_pointrange(aes(ymin=Id-sd, ymax=Id + sd))
我认为这就是你所追求的。使用dplyr
的替代方法。您的代码中有一些错误(您注释了sd
的计算,并调用了一个不存在的keyword
),但我没有收到您发布的错误。
library(dplyr)
library(ggplot2)
df %>% group_by(Name) %>% summarise(mean = mean(Id), sd = sd(Id)) %>%
mutate(group = 1) %>%
ggplot(aes(x=Name, y=mean)) +
geom_pointrange(aes(ymin=mean-sd, ymax=mean + sd)) + geom_line(aes(group = group))