说我想用以下数据绘制条形图:
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’
答案 0 :(得分:1)
我不确定它是否强大,但是似乎可以通过x
代词访问y
,PANEL
和.data
。
它们以其原始名称和原始值命名,而不是layer_data
中的名称,因此,如果我不想重复Sepal.Length
而不是Species
,我可以这样做:
p + geom_text(aes(
y = .data[[names(.data)[2]]]/2,
label = .data[[names(.data)[1]]]),
color = "white")