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