我已經回顧了上一個關於堆棧溢出的問題,它涉及到我的ggplot問題,但我無法找到明顯有用的東西。使用GGPLOT循環Freq圖aes_string
問題:如何修改以下代碼以使用循環爲數據框中的每列(變量)生成單獨的頻率圖(直方圖)。即ID x每個變量?
數據:
example.xlsx
ID a1.sum b3.sum c6.sum d9.sum
April Showers 10 5 15 0
Anita Job 2 3 1 14
Candy Cain 4 7 14 17
Crystal Ball 6 8 16 12
Dot Matricks 15 9 1
Kay Largo 4 10 5 13
代碼:
#set work DIR
setwd("C:/A")
library(rJava)
options(java.parameters = "-Xmx2048m") ## memory set to 2 GB
library(xlsx)
#read in .xlsx file and apply encoding UTF-8 (French accents)
DAT <- read.xlsx("example.xlsx", 1, encoding="UTF-8")
#plot data
library(ggplot2)
p <- ggplot(subset(DAT, a1.sum>1), aes(ID, a1.sum, y=a1.sum))
p <- p + geom_bar(stat="identity", fill="blue", color="green")
p <- p + theme(plot.background = element_rect(fill = "white"),
panel.background = element_rect(fill = "white"),
panel.grid.major = element_line(colour = "white",size=0.25),
panel.grid.minor = element_blank())
p <- p + theme(axis.text.x=element_text(size=10,angle=90, hjust=1, face="plain", family="serif"))
p <- p + theme(axis.text.y=element_text(size=10, hjust=1, face="plain", family="serif"))
p <- p + theme(axis.line.x = element_line(color="black", size = 0.50),
axis.line.y = element_line(color="black", size = 0.5))
p
ggsave(filename="a1.png", plot=p)
輸出:
繪圖a1.sum Example of plot output
試圖創建一個循環來爲變量b3,c6和d9生成相同的繪圖。
我嘗試了幾種不同的方法,使用aes_string。以下是我正在試圖建立循環:
#get variable names that end in .sum
n <- names(DAT[grep("*.sum",names(DAT))])
#loop through variable names
for (i in 1:length(n)){
in_dat <- c(n[i])
...ggplot...
print(p[i]);
}
謝謝@Nick Criswell – BEMR
謝謝@Nick Criswell。當x軸ID被限制在一個小集合時可以正常工作。仍然想爲每個變量生成單獨的圖。你的代碼只是在最後一行缺少** p **。我喜歡這個選項。 – BEMR
@BEMR,我添加了另一個解決方案,其中每列用於創建一個單獨的'ggplot'對象,它存儲在一個列表中。 –