r - 通过变量编号在AES中寻址x和y

标签 r ggplot2

我需要绘制一个散点图,用变量的列号而不是名称来寻址变量,即代替ggplot(dat, aes(x=Var1, y=Var2))我需要像ggplot(dat, aes(x=dat[,1], y=dat[,2]))这样的东西。 (我说“某事”是因为后者不起作用)。

这是我的代码:

showplot1<-function(indata, inx, iny){
  dat<-indata
  print(nrow(dat)); # this is just to show that object 'dat' is defined
  p <- ggplot(dat, aes(x=dat[,inx], y=dat[,iny]))
  p + geom_point(size=4, alpha = 0.5)
}

testdata<-data.frame(v1=rnorm(100), v2=rnorm(100), v3=rnorm(100), v4=rnorm(100), v5=rnorm(100))
showplot1(indata=testdata, inx=2, iny=3)

# Error in eval(expr, envir, enclos) : object 'dat' not found

最佳答案

使用ggplot2 V3.0.0的新功能对@Shadow的答案进行了变形:

showplot <- function(indata, inx, iny){
  nms <- names(indata)
  x <- nms[inx]
  y <- nms[iny]
  p <- ggplot(indata, aes(x = !!ensym(x), y = !!ensym(y)))
  p + geom_point(size=4, alpha = 0.5)
}   

testdata <- data.frame(v1=rnorm(100), v2=rnorm(100), v3=rnorm(100), v4=rnorm(100), v5=rnorm(100))
names(testdata) <- c("a-b", "c-d", "e-f", "g-h", "i-j")
showplot(indata=testdata, inx=2, iny=3)
ensym从变量中包含的字符串创建一个符号(因此我们首先必须在函数的开头创建这些变量),然后!!取消对它的引用,这意味着它将像您已输入函数原始名称一样工作。
!!仅在旨在支持它的函数(通常是tidyverse函数)的上下文中起作用,否则仅表示“不是”(类似于as.logical)。

关于r - 通过变量编号在AES中寻址x和y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15323269/

相关文章:

r - 在 R 中查找 "near duplicates"字符串

r - ggplot时间序列间隔堆积条

r - 如何使用一个变量连续填充 ggplot2 条形图

r - 编写ggplot自定义几何函数

r - R lm() 中的 ^ 符号

r - 根据另一个 data.table 中的值更新 data.table

r - 将数字转换为时间(0.5小时= 00 :30:00)

r - 创建遵循概率分布的日期向量

r - 如何增加ggplot2图例中点的大小?

r - 参数何时进入 aes() 内部或外部?