【问题标题】:R pass variable column indices to ggplot2 [duplicate]R将变量列索引传递给ggplot2 [重复]
【发布时间】:2013-03-05 17:01:30
【问题描述】:

我正在尝试将列索引作为我将重复使用的函数的一部分传递给 ggplot。 喜欢:

myplot <- function(df){
    ggplot(df, aes(df[, 1], df[, 2])) + geom_point()
}

我将始终使用第一列作为我的 x 变量,第二列作为我的 y 变量,但是列名在数据集之间会发生变化。我已经到处搜索了..有什么想法吗?

编辑:

这是我使用的答案:

require(ggplot2)

myplot <- function(df){
   ggplot(df, aes_string(colnames(df)[1], colnames(df)[2])) + geom_point()
}

【问题讨论】:

  • 您的问题标题似乎与 Paul Hiemstra 的回答相对应,该回答涉及使用字符串列名。但是你的问题的主体是关于使用他们的索引,这确实是一个被标记的重复。我建议您更改问题的正文以匹配答案。
  • @MaxGhenis 这两种情况(以及更多)都在 Paul 的回答和下面的 cmets 中得到了回答。
  • 我明白了。对于那些偶然发现这一点的人来说,内容的不匹配仍然令人困惑;问题应该是具体的和明确的。更改它也可能提供一个机会,使其不被标记为重复。
  • @MaxGhenis 作为修改后的标题,您有什么建议?
  • 编辑:忽略下面,我最初并没有误读。问题应为“R pass variable column indices to ggplot2”,并被正确标记为重复。 原件;忽略: 射击,对不起,我刚刚意识到我误读了这个问题,认为传递索引是有问题的。这只是一个错误的重复标记,可能需要比我有更多业力的人来请求审查。抱歉,N8TRO!

标签: r ggplot2 dataframe


【解决方案1】:

您可以使用aes_string 代替aes 来传递字符串而不是使用对象,即:

myplot = function(df, x_string, y_string) {
   ggplot(df, aes_string(x = x_string, y = y_string)) + geom_point()
 }
myplot(df, "A", "B")
myplot(df, "B", "A")

【讨论】:

  • 谢谢,它可以工作,虽然不理想,因为我必须手动给出列名。有什么办法可以解决这个问题?
  • aes_string(colnames(df)[1], colnames(df)[2])
  • 一般来说,在ggplot2 中你不会在aes 中提供向量。在aes 中,您提供了绘图美学到数据列的映射,无需对aes 中的数据进行硬编码。
  • 例如,如果您的列名是a-b,那么这会给出错误Error in eval(expr, envir, enclos) : object 'a-b' not found。使用environment = environment() 和aes 是上面OP 帖子下链接的另一个修复方法。
  • @PaulHiemstra,我已经链接了一种方法(根本不使用列名)。如果你坚持使用列名,那么试试这个:set.seed(45); df &lt;- data.frame(x=gl(5,5), y=runif(25)); myplot2 = function(df, col1, col2) { ggplot(df, aes(x = get(names(df)[col1]), y = get(names(df)[col2])), environment = environment()) + geom_point() }。从此可以直接更改此函数以将列名作为参数。
猜你喜欢
  • 2013-01-27
  • 2020-09-14
  • 1970-01-01
  • 2014-01-11
  • 2016-02-23
  • 2013-01-28
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多