gpt4 book ai didi

r - ggplot for 循环输出所有相同的图形

转载 作者:行者123 更新时间:2023-12-04 02:07:57 26 4
gpt4 key购买 nike

我编写了一个 for 循环,它遍历数据框的列并使用 ggplot 为每一列生成一个图表。问题是输出的图表都是相同的 - 它们都是最后一列的图表。

我使用的代码是:

library(gridExtra)
library(ggplot2)
test1 <- c("Person1","Person2","Person3","Person4","Person5")
test2 <- as.data.frame(c(1,2,3,4,5))
test3 <- as.data.frame(c(2,2,2,2,2))
test4 <- as.data.frame(c(1,3,5,3,1))
test5 <- as.data.frame(c(5,4,3,2,1))
test <- cbind(test1,test2,test3,test4,test5)
rm(test1,test2,test3,test4,test5)
colnames(test) <- c("Person","var1","var2","var3","var4")

for(i in 2:5){
nam <- paste0("graph", i-1)
graph_temp <- ggplot(test, aes(Person, test[,i])) + geom_bar(stat = "identity")
assign(nam, graph_temp)
}
grid.arrange(graph1, graph2, graph3, graph4, ncol=2)

我的目标是这段代码中的情节:

library(gridExtra)
library(ggplot2)
test1 <- c("Person1","Person2","Person3","Person4","Person5")
test2 <- as.data.frame(c(1,2,3,4,5))
test3 <- as.data.frame(c(2,2,2,2,2))
test4 <- as.data.frame(c(1,3,5,3,1))
test5 <- as.data.frame(c(5,4,3,2,1))
test <- cbind(test1,test2,test3,test4,test5)
rm(test1,test2,test3,test4,test5)
colnames(test) <- c("Person","var1","var2","var3","var4")

graph1 <- ggplot(test, aes(Person, test[,2])) + geom_bar(stat = "identity")
graph2 <- ggplot(test, aes(Person, test[,3])) + geom_bar(stat = "identity")
graph3 <- ggplot(test, aes(Person, test[,4])) + geom_bar(stat = "identity")
graph4 <- ggplot(test, aes(Person, test[,5])) + geom_bar(stat = "identity")
grid.arrange(graph1, graph2, graph3, graph4, ncol=2)

我知道有一个 similar question关于在 for 循环中保存 ggplots,但我还没有设法让那个解决这个问题。

最佳答案

这是生成示例的更简洁的方法:

df <- data.frame(
Person = paste0("Person", 1:5),
var1 = c(1,2,3,4,5),
var2 = c(2,2,2,2,2),
var3 = c(1,3,5,3,1),
var4 = c(5,4,3,2,1)
)

现在,关于你的阴谋。

最佳解决方案

将数据框 reshape 为“长”格式,然后使用分面:

library(ggplot2)
library(tidyr)
gather(df, var, value, -Person) %>%
ggplot(aes(Person, value)) +
geom_bar(stat = "identity") +
facet_wrap(~ var)

enter image description here

否则……

如果您必须坚持使用看起来像您发布的数据结构,那么请使用 aes_string :

library(ggplot2)
library(gridExtra)

g <- lapply(1:4, function(i) {

ggplot(df, aes_string("Person", paste0("var", i))) +
geom_bar(stat = "identity")

})
grid.arrange(grobs = g, ncol = 2)

enter image description here

关于r - ggplot for 循环输出所有相同的图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41666078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com