遍历列以使用 for 循环生成 ggplot [duplicate]

Iterate over columns to produce ggplot using for loop [duplicate]

提问人:TheBoomerang 提问时间:11/10/2023 最后编辑:zx8754TheBoomerang 更新时间:11/10/2023 访问量:31

问:

我想使用 for 循环创建多个箱线图,但在实现所需输出时遇到问题。

以下是我所做的事情的一个例子:

library(ggplot2)
library(magrittr)
for(i in colnames(iris[1:4])) {
  print(iris %>% ggplot(aes(x = Species, y = i)) + geom_boxplot())
}

它正在执行一个循环,但输出只是平面箱线图。我假设我放置的位置,值在迭代过程中采用列名的名称,这是否不正确?y = ii

r for-loop ggplot2

评论


答:

1赞 thothal 11/10/2023 #1

基本上,您告诉要设置为字符串(在第一次迭代中),并且不会将其转换为ggploty"Sepal.Length"ggplotSepal.Length

因此,您需要明确告知您想要该列,并且有几种方法可以做到这一点。ggplot

下面有两个例子。第一种是使用代词,代词可以在整个过程中的多个地方使用来指代数据。.datatidyverse

第二种选择使用整洁的引用原则。

library(ggplot2)
library(magrittr)
for(i in colnames(iris[1:4])) {
  dev.new()
  print(iris %>% ggplot(aes(x = Species, y = .data[[i]])) + geom_boxplot())
  ## or
  # print(iris %>% ggplot(aes(x = Species, y = !!sym(i))) + geom_boxplot()) 
}