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

问题描述 投票:0回答:2

我想在我的 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
r ggplot2
2个回答
2
投票

首先,让我们为您要使用的列命名为

sd
,就像您在代码中使用它的方式一样:

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

然后我们将

sd
列添加到您正在绘制的数据框中:

res2 = merge(res2, sd)

那么你的情节就可以正常工作了:

enter image description here

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


0
投票

请注意,使用库superb(我是维护者),您无需担心汇总分数。只需使用

library(ggplot2)
library(superb)

superb(MeanDecreaseGini ~ Feature, data) +
    coord_flip() +
    theme_classic() +
    labs(
      x     = "Feature",
      y     = "Importance",
      title = "Feature Importance")

从中您可以获得具有 95% 置信区间(默认)的图,或添加选项

errorbar = "SE"
以获得标准误差:

Mean plot with standard error

© www.soinside.com 2019 - 2024. All rights reserved.