使用ggplot2 :: stat时找不到y

时间:2018-10-04 13:47:54

标签: r ggplot2

说我想用以下数据绘制条形图:

df <- aggregate(Sepal.Length ~ Species, iris, mean)
#      Species Sepal.Length
# 1     setosa        5.006
# 2 versicolor        5.936
# 3  virginica        6.588

p <- ggplot(df, aes(Species, Sepal.Length)) + geom_col()

layer_data(p)
#   x     y PANEL group ymin  ymax xmin xmax colour   fill size linetype alpha
# 1 1 5.006     1     1    0 5.006 0.55 1.45     NA grey35  0.5        1    NA
# 2 2 5.936     1     2    0 5.936 1.55 2.45     NA grey35  0.5        1    NA
# 3 3 6.588     1     3    0 6.588 2.55 3.45     NA grey35  0.5        1    NA

我想在中等高度的酒吧上添加标签,这可行:

p + geom_text(aes(y=Sepal.Length/2, label = Species), color="white")

但是我不想重复Sepal.Length,所以我尝试使用stat,但出现错误:

p + geom_text(aes(y=stat(y)/2, label = Species), color="white")
  

FUN(X [[i]],...)中的错误:找不到对象'y'

这很奇怪,因为layer_data(p)中的某些变量有效而另一些无效,例如:

p + geom_text(aes(y=stat(x)/2, label = Species), color="white")
p + geom_text(aes(y=stat(group)/2, label = Species), color="white")

这也可以:

p <- ggplot(df, aes(Species, Sepal.Length, yy =Sepal.Length)) + geom_col()
p + geom_text(aes(y=stat(yy)/2, label = Species), color="white")

这是一个错误吗?我该如何解决?

我的配置(在Windows上):

R.Version()$version.string
# [1] "R version 3.3.1 (2016-06-21)"
.rs.rVersionString()
# [1] "3.3.1"
packageVersion("ggplot2")
# [1] ‘3.0.0’

1 个答案:

答案 0 :(得分:1)

我不确定它是否强大,但是似乎可以通过x代词访问yPANEL.data

它们以其原始名称和原始值命名,而不是layer_data中的名称,因此,如果我不想重复Sepal.Length而不是Species,我可以这样做:

p + geom_text(aes(
  y     = .data[[names(.data)[2]]]/2,
  label = .data[[names(.data)[1]]]),
  color = "white")