[英]multiple ggplots in for loop, always same plot
所以我有一個數據幀tmp,每一列遵循不同的分布。 我想做的是在pdf中繪制直方圖,每頁繪制一個直方圖。 但是,為什么我得到的直方圖是三倍?
當我輸入g11時,我得到了直方圖g13,但是當我在pdf中繪制直方圖時,而不是3個相同的頁面(帶有1-3個直方圖),我得到了3個不同的頁面,上面有相同的直方圖。
可能是ggplot與指針一起工作,並且由於第二個for循環而繪制了g1i嗎?
有沒有辦法重寫我的代碼? (這個例子簡化了我的問題)
tmp <- data.frame(x=rnorm(n=20, mean=0, sd=1),
y=rnorm(n=20, mean=10, sd=2),
z=rnorm(n=20, mean=40, sd=5))
for (i in 1:3){
assign(paste("g1", i, sep=""),ggplot(tmp,aes(x=get(colnames(tmp)[i]))) + geom_histogram(binwidth=1))
}
pdf("/pathto/plot.pdf")
for(i in 1:3){
#i <- 1
grid.arrange(get(paste("g1", 1, sep="")), get(paste("g1", 2, sep="")), get(paste("g1", 3, sep="")))
}
dev.off()
我認為第一個for循環中的get
不能正確更改列。 您可以嘗試以下方法:
for (i in 1:3){
assign(paste("g1", i, sep=""),ggplot(tmp,aes_string(x=colnames(tmp)[i])) + geom_histogram(binwidth=1))
}
我會像下面的代碼一樣重寫它。 首先,我將數據從寬格式轉換為長格式,然后對每個級別(x,y,z)進行子集化並進行繪制。
library(ggplot2)
library(tidyr)
tmp <- data.frame(x=rnorm(n=20, mean=0, sd=1),
y=rnorm(n=20, mean=10, sd=2),
z=rnorm(n=20, mean=40, sd=5))
xy <- gather(tmp)
pdf("histogram.pdf")
for (i in unique(xy$key)) {
x <- droplevels(xy[xy$key == i, ])
print(
ggplot(x, aes(x = value)) +
theme_bw() +
geom_histogram()
)
}
dev.off()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.