2016-12-22 7 views
0

Mit Hilfe von @ Nick Criswell ich gelernt habe, wie eine Make Plot-Funktion zum Erstellen und lapply mit ggplot2 und aes_string. loop Freq plot with GGPLOT aes_stringPlot nur Werte größer als angegeben Wert: ggplot R

Ich habe Probleme, den Code zu ändern, um nur Werte zu plotten, die größer als ein vorgegebener Schwellenwert sind. Bevor die Funktion Ansatz codiert ich folgendes, die funktioniert:

p <- ggplot(subset(DAT, al.sum>10), aes(word, al.sum, y=freq)) 

Frage: Wie modifiziere ich den folgenden Code nur Plot Werte über einen bestimmten Schwellenwert? h. ich möchte nur, dass jeder Datensatz in das Häufigkeitsdiagramm aufgenommen wird, wenn der Zählwert größer als 10 ist. Aus dem unten stehenden Code mit dieser Bedingung für al.sum würden nur Dot_Matricks in dem Diagramm enthalten sein.

#set work DIR 
setwd("C:/A") 

#Data create 
DAT <- read.table(text = "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 0 1 
       Kay_Largo 4 10 5 13", 
       header = TRUE, stringsAsFactors = FALSE) 

#Plot Data function 
library(ggplot2) 

make_plots = function(data, column){ 
ggplot(data, aes_string(x = "ID", y=column)) + 
geom_bar(stat="identity", fill="blue", color="green") + 
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(), 
     axis.text.x=element_text(size=10,angle=90, hjust=1, 
           face="plain", family="serif"), 
     axis.text.y=element_text(size=10, hjust=1, face="plain", family="serif"), 
     axis.line.x = element_line(color="black", size = 0.50), 
     axis.line.y = element_line(color="black", size = 0.5)) 
} 

#lapply function 
myplots <- lapply(colnames(DAT[2:ncol(DAT)]), make_plots, data = DAT) 

#collect names of each col that end with .sum 
n <- names(DAT[grep("*.sum",names(DAT))]) 

#save each plot as .png 
for (i in 1:length(n)){ 
    print(myplots[i]) 
ggsave(filename=paste0(i,".png")) 
} 
+4

Anstatt 'data' an' ggplot() 'zu senden, sende' subset (data, a1.sum> 10) ' – jdobres

+0

Ja, du solltest Subset, aber' Subset' ist nur für den interaktiven Gebrauch gedacht, wäre es besser zu verwenden 'Daten [Daten $ a1.sum> 10,]' – Llopis

Antwort

1

Dies sollte den Trick:

make_plots = function(data, column,Threshold){ 

    PltData <- data[data[,column] >Threshold,] 

    Plt <- ggplot(PltData, aes_string(x = "ID", y=column)) + 
    geom_bar(stat="identity", fill="blue", color="green") + 
    theme_bw()+ 
    theme(
     panel.grid.major = element_line(colour = "white",size=0.25), 
     panel.grid.minor = element_blank(), 
     axis.text.x=element_text(size=10,angle=-30, hjust=0) 
    ) 
    # Plt 
    ggsave(Plt,filename=paste0(column,".png")) 
} 

lapply(colnames(DAT[2:ncol(DAT)]), make_plots, data = DAT,Threshold=10) 

Sie dies auch mit der Untergruppe Funktion tun könnten. Wenn Sie die Diagramme zu Ihrer R-Sitzung kommentieren möchten, geben Sie die Zeile ggsave ein und entfernen Sie die Kommentarzeichen Plt.

+0

Dank @ Bishops_Guest perfekt. – BEMR