如何在ggplot中使用变量测度(误差线)?

时间:2018-11-14 21:53:56

标签: r ggplot2

我想在ggplot中插入错误栏,但不起作用。我的下面的代码有什么问题?

首先模拟一些数据

set.seed(123)
data<-NULL
data$MeanDecreaseAccuracy <- rnorm(60,10)
data$Feature <- ifelse(data$MeanDecreaseAccuracy > 9, 
c("red"), c("blue"))
data$MeanDecreaseGini <- rpois(60,7)
data<-as.data.frame(data)
#

使用均值和误差线创建ggplot

计算出的平均值

res2<-aggregate(as.numeric(MeanDecreaseGini) ~ Feature , data, mean)
colnames(res2)<-c("Feature","MeanDecreaseGini")

计算误差线

st.err <- function(x, na.rm=FALSE) {
     if(na.rm==TRUE) x <- na.omit(x)
     sd(x)/sqrt(length(x))
     }
sd <- aggregate(as.numeric(MeanDecreaseGini) ~ Feature, data, st.err)
colnames(sd)<-c("Feature","MeanDecreaseGini")

在ggplot中绘制图

  ggplot(res2, aes(x = Feature, 
                         y = MeanDecreaseGini)) +
    geom_bar(stat='identity') +
    coord_flip() +
    theme_classic() +
    labs(
      x     = "Feature",
      y     = "Importance",
      title = "Feature Importance") + 
   geom_errorbar(aes(ymin=MeanDecreaseGini-sd, ymax=MeanDecreaseGini+sd))
#

Error: Columns `ymin`, `ymax` must be 1d atomic vectors or lists
In addition: Warning messages:
1: In Ops.factor(left, right) : ‘-’ not meaningful for factors
2: In Ops.factor(left, right) : ‘+’ not meaningful for factors

1 个答案:

答案 0 :(得分:2)

首先,让我们将要使用的列命名为sd,在代码中的使用方式为

colnames(sd)<-c("Feature","sd")

然后,我们将sd列添加到要绘制的数据框中:

res2 = merge(res2, sd)

然后您的情节正常运行

enter image description here

您可能需要调整误差线的颜色或宽度。