0

我确信这将是一个“哦,天哪”的简单答案,但我总是无法理解 ggplot2 (0.9.3) 的基本范式。使用以下数据和辅助函数:

ltd <- data.frame(r = c(rnorm(5, 5, 1.5), rnorm(5, 8, 2)),
    f1 = c(rep("L", 5), rep("H", 5)))

seXy <- function (x) {
    m <- mean(na.omit(x))
    se <- sd(x, na.rm = TRUE)/sqrt(length(na.omit(x)))
    u <- m + se
    l <- m - se
    c(y = m, ymin = l, ymax = u)
    }

qplot请求工作正常:

tp <- qplot(x = f1, y = r, data = ltd, geom = "point")
tp <- tp + stat_summary(fun.data = "seXy", color = "red", geom = "linerange")
print(tp)

但是这个ggplot2请求没有绘制线段,也没有给出错误(并且使用替代的注释行没有做任何不同的事情):

tp <- ggplot()
tp <- tp + geom_point(aes(x = f1, y = r), data = ltd)
#tp <- tp + stat_summary(fun.data = "seXy", color = "red", geom = "linerange")
tp <- tp + stat_summary(fun.data = "seXy", color = "red", geom = "linerange", 
        aes(ymin = ..ymin.., ymax = ..ymax..))
print(tp)

第二种方法需要什么才能linerange出现?我显然误解了一些东西。当然,这是一个 MWE,真实的上下文更复杂,但如果不理解这个简单的例子,我无法解决这个问题。看起来像是qplot在后台为我做某事,但我不知道是什么。谢谢。

4

1 回答 1

1

问题可能是您仅在其中定义数据geom_point(),因此stat_summary()不使用它们。

如果将dataandaes()放入ggplot()函数中,则stat_summary()给​​出linerange.

ggplot(ltd,aes(x = f1, y = r))+geom_point()+
  stat_summary(fun.data = "seXy", color = "red", geom = "linerange")

如果dataaes()定义在stat_summary()

tp <- ggplot()
tp <- tp + geom_point(aes(x = f1, y = r), data = ltd)
tp <- tp + stat_summary(data=ltd,aes(x = f1, y = r),fun.data = "seXy", color = "red", geom = "linerange")
print(tp)
于 2013-01-17T16:19:47.830 回答