簡體   English   中英

for循環中有多個ggplots,總是相同的圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM