使用ggplot r如何绘制折线图和误差线图?

时间:2018-11-29 18:17:41

标签: r ggplot2

我的数据只有两列:

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))

请有人帮助绘制此数据的错误栏

1 个答案:

答案 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))