【发布时间】:2019-01-28 21:37:59
【问题描述】:
我正在尝试使用 for 循环为数据框中的每一列创建一个 ggplot。我对此很陌生,所以我的方法在这里可能非常错误。
我写了一个函数来创建 ggplot:
create_scatter <- function(df, x, y) {
ggplot(df, aes(x, y)) +
geom_point() +
xlab(name) +
ylab("quality")
}
还有一个 for 循环按名称遍历 Dataframe 列(以获取列的名称以供以后使用),然后获取列的内容以用于绘图功能。
for (name in names(whiteWines)) {
for (column in whiteWines[name]) {
assign(paste0(name, "_scatter"),
create_scatter(whiteWines, column, whiteWines$quality))
}
}
使用assign(),我可以从列名动态创建一个变量名,并将 ggplot 的结果分配给它。
然后我使用 grid.arrange 将结果图排列在 3 x 4 网格中。
grid.arrange(fixed.acidity_scatter,
volatile.acidity_scatter,
citric.acid_scatter,
residual.sugar_scatter,
chlorides_scatter,
free.sulfur.dioxide_scatter,
total.sulfur.dioxide_scatter,
density_scatter,
pH_scatter,
sulphates_scatter,
alcohol_scatter,
layout_matrix = rbind(c(1,2,3), c(4,5,6), c(7,8,9), c(10,11,12)))
执行时会创建所有散点图,但它们都包含循环中最后一个散点图的数据。
如果我将 assign 语句包装在 print() 语句中,那么我确实会在网格中得到所需的结果,但每个单独的图也会被打印出来。
【问题讨论】:
-
您是否有什么特别的原因不是简单地重塑数据然后使用分面?
-
您可以分享数据以便人们帮助复制您的问题吗?
-
我真的很陌生。对R不太了解,只是想通过这个过程进行逻辑思考。我肯定会看一看。谢谢!
-
添加了数据集的链接。