簡體   English   中英

使用spplot在R中的for循環中繪制圖

[英]Make plots in a for loop in R with spplot

我在用R語言編寫程序時遇到了一些麻煩,通常我會在另一種語言的for循環中執行此操作...

我現在正在嘗試使用sp程序包中的spplot繪制圖(這是一個chloropleth映射),但是我想針對一堆變量進行繪制。 在for循環中,我將這樣編程:

for (TRAIT in c("height","bmi","whr","body_fat","income")){
pdf("plot_of_TRAIT.pdf")
spplot(MyData, "TRAIT", col.regions = my.palette, cuts = 8, lwd = 0.5)
dev.off()
}

TRAIT的每個實例都應替換為我提供給for循環的變量(因此在pdf的文件名中,並作為spplot命令中的參數)。 現在,顯然此代碼不起作用,但是如何在R中執行此操作呢?

更新:

我得到了創建不同pdf文件的代碼,但是spplot命令仍然無法使用。 它會創建空的pdf文件:

for (TRAIT in c("height","bmi","whr","body_fat","income")){
outfile <- paste0("plot_of_", TRAIT, ".pdf")
pdf(outfile)
spplot(MyData, TRAIT, col.regions = my.palette, cuts = 8, lwd = 0.5)
dev.off()
}

如果我在for循環之外運行完全相同的代碼,如下所示:

pdf("plot_of_height.pdf")
spplot(MyData, "height", col.regions = my.palette, cuts = 8, lwd = 0.5)
dev.off()

它工作正常,並且我在文件plot_of_height.pdf中獲得了所需的圖。

更新2:這似乎是spplot的問題。 如果我運行此命令:

TRAIT <- "height"
pdf("plot_of_height.pdf")
spplot(MyData, TRAIT, col.regions = my.palette, cuts = 8, lwd = 0.5)
dev.off()

我收到以下錯誤:

Error in [.data.frame(obj@data, zcol) : undefined columns selected

您需要使用變量構造輸出文件名。

例如:

outfile <- paste0("plot_of_", TRAIT, ".pdf")
pdf(outfile)

對於spplot您可能需要使用TRAIT (無引號)。

編輯:

由於spplot(zcol = ...可以是列號,我想知道這是否可行?

traits <- c("height","bmi","whr","body_fat","income")
for(i in 1:length(traits)) {
  pdf(paste0("plot_of_", traits[i], ".pdf")
  spplot(MyData, i, col.regions = my.palette, cuts = 8, lwd = 0.5)
  dev.off()
}

如果不查看數據,我無法說出為什么您有未定義的列錯誤。 用meuse數據集復制“ UPDATE 2”代碼對我不會引發相同的錯誤:


library(sp)
demo(meuse, ask = FALSE, echo = FALSE)
TRAIT <- "copper"
my.palette <- c("black", "red", "green", "blue")
spplot(meuse, TRAIT, col.regions = my.palette, cuts = 8, lwd = 0.5)

對於您的問題的第一種情況: spplot (與ggplot )不會從循環內將任何內容輸出到設備,除非顯式打印。 基本上,您要打開一個pdf文件,創建圖,但不將其保存到pdf文件中,然后

以下代碼將為您工作:

for (TRAIT in c("height","bmi","whr","body_fat","income")){
    outfile <- paste0("plot_of_", TRAIT, ".pdf")
    pdf(outfile)
    print(spplot(MyData, TRAIT, col.regions = my.palette, cuts = 8, lwd = 0.5))
    dev.off()
}

我使用Meuse數據集對其進行了測試,並在其中正常工作:

library(sp)
demo(meuse, ask = FALSE, echo = FALSE)
my.palette <- c("black", "red", "green", "blue")
for(TRAIT in c("cadmium", "copper", "lead", "zinc")){
  outfile <- paste0("plot_of_", TRAIT, ".pdf")
  pdf(outfile)
  print(spplot(meuse, TRAIT, col.regions = my.palette, cuts = 8, lwd = 0.5))
  dev.off()
}

給我4個不同的pdf,每個pdf包含相應變量的空間圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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