如何在ggplot中对匿名数据框进行列索引以映射美学属性
解决方案
你遇到的核心问题是语法错误,.data[[,1]]的写法不符合R的索引规则,正确的索引方式是.data[[1]](去掉多余的逗号)。此外,也可以用cur_data()函数直接引用当前数据集并按索引取列,两种方法都能实现「匿名按列位置映射美学属性」的需求。
方法1:修正.data代词的索引写法
.data是ggplot的内置代词,支持通过位置索引([[n]])引用列,只需修正语法即可:
library(tidyverse) df1 <- data.frame(col1 = 1:10, col2 = 11:20) df2 <- data.frame(var1 = 21:30, var2 = 31:40) # 修正索引语法:.data[[1]]而非.data[[,1]] p <- geom_col(mapping = aes(x = .data[[1]], y = .data[[2]])) # 分别用两个数据框绘图 ggplot(data = df1) + p ggplot(data = df2) + p
方法2:使用cur_data()函数
cur_data()会返回当前ggplot正在使用的完整数据集,直接对它做索引操作逻辑更直观:
p <- geom_col(mapping = aes(x = cur_data()[[1]], y = cur_data()[[2]])) ggplot(df1) + p ggplot(df2) + p
两种方法都能创建可复用的geom层,无需关心数据框的变量名,仅通过列的位置就能完成x、y美学属性的映射。
内容的提问来源于stack exchange,提问作者Peter Korinth
相关产品推荐
相关产品推荐

