r - 使用`ggplot2::stat`时找不到`y`
问题描述
假设我想用以下数据绘制条形图:
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’
解决方案
我不确定它有多健壮,但似乎x
,y
并且PANEL
可以通过.data
代词访问。
它们以其原始名称和原始值命名,而不是 from layer_data
,所以如果我不想重复,Sepal.Length
我Species
可以这样做:
p + geom_text(aes(
y = .data[[names(.data)[2]]]/2,
label = .data[[names(.data)[1]]]),
color = "white")
推荐阅读
- embed - 如何从 url 中获取丰富的内容(如 Discord)?
- python - 替换二维列表中特定值的更有效方法?
- linux - 我使用正确的命令吗?
- python - 发送消息后如何让我的不和谐机器人给我角色?
- eclipse - 安装 CUDA 插件 + Eclipse 更新后出现“无编辑器描述符”错误
- javascript - Firebase 错误 - 提供给 Query.startAt() 的参数过多
- python - 运行新的 cygwin shell 并在我想要的时候杀死它
- sql - 使用 WRDS MSRB 数据集上的 SQL 查询从许多 CUSIP 中检索数据
- flutter - 如果 body 为空,如何停止在 nestedScrollView 中滚动
- python - 了解路径/环境/streamlit