2016-06-16 12 views
0

ich die Arbeit an diesem dfggplot2 mit generischen Werte sammeln

Col0 <- c("AA", "BB", "CC", "DD","EE","FF") 
    Col1 <- c(2,2,2,6,1,1) 
    Col2 <- c(2,2,2,1,3,4) 
    Col3 <- c(2,2,3,4,6,6) 
    Col4 <- c(2,2,3,1,2,1) 
    Col5 <- c(2,1,1,1,1,4) 
    Col6 <- c(2,4,2,5,4,4) 
    Col7 <- c(2,4,2,5,4,4) 
    Col8 <- c(2,2,3,4,5,4) 
    Col9 <- c(1,3,3,2,2,2) 
    df<-data.frame(Col0,Col1,Col2,Col3,Col4,Col5,Col6,Col7,Col8,Col9) 

Und mit Facette habe ich ein Diagramm

library(ggplot2) 
library(tidyr) 

pl<-df %>% 
    gather(Hi, Val, -Col0) %>% 
    ggplot(aes(Hi, Val, group = Col0, col = Col0)) + facet_grid(Col0 ~ .) 

pl<- pl + geom_line() +theme(
    axis.text.x = element_text(angle = 90, hjust = 1))+ theme(panel.border = element_rect(colour = "black", fill=NA, size=1),legend.direction ="vertical",legend.position = "right")+guides(fill=guide_legend(ncol=1))+scale_y_continuous(labels=comma) +theme(legend.text = element_text(size=6)) 

print(pl) 

Die Frage möglich ist, statt Col0 Pass auf die Funktionen unter Verwendung der Wert:

value<- names(df[1]) 

Weil ich "m auf eine Menge von df arbeiten, und ich möchte die Funktion verallgemeinern

+1

In 'gather' oder' ggplot'? Sieh dir 'aes_string' für ggplot2 und' gather_' in tidyr an. – aosmith

+0

Ich brauche es in beiden von ihnen, ich würde 'value' verwenden müssen jedes Mal erscheint Col0 – juse

+0

@aosmith Ich bin neu mit R, wenn Sie mir ein gelöstes Beispiel liefern könnten Sie wirklich mein Leben retten – juse

Antwort

1

Um mit Strings in einer Funktion arbeiten zu können, benötigen Sie die Standard-Evaluierungsversionen der Funktionen ggplot2 und tidyr. In tidyr enden diese mit einem Unterstrich. In ggplot2 möchten Sie aes_string (oder möglicherweise aes_).

Die Standardauswertung Teil tidyr würde wie folgt aussehen:

df %>% gather_("Hi", "Val", select_vars_(names(.), 
             names(.), 
             exclude = "Col0")) 

Alles in gather_ ist eine Zeichenfolge. Der komplizierte Teil des Codes, der select_vars_ verwendet, ist, weil Sie die Spalten ausschließen möchten. Siehe here.

Für die Handlung können Sie einfach aes für aes_string ändern und Zeichenfolgen für Variablennamen verwenden. Der schwierigere Teil ist die Verwendung einer Zeichenfolge in facet_grid, die mit formula wie gezeigt here durchgeführt werden kann.

Die Änderung dieser Teil des Codes würde wie folgt aussehen:

ggplot(aes_string("Hi", "Val", group = "Col0", col = "Col0")) + 
    facet_grid(as.formula(paste("Col0", "~."))) 

, dass diese in eine Funktion setzen wird ist alles links.

plotfun = function(data, column) { 
    data %>% 
     gather_("Hi", "Val", select_vars_(names(.), 
              names(.), 
              exclude = column)) %>% 
     ggplot(aes_string("Hi", "Val", group = column, col = column)) + 
     facet_grid(as.formula(paste(column, "~."))) + 
     geom_line() + 
     theme(axis.text.x = element_text(angle = 90, hjust = 1), 
       panel.border = element_rect(colour = "black", fill=NA, size=1), 
       legend.direction ="vertical", 
       legend.position = "right", 
       legend.text = element_text(size=6)) + 
     guides(fill=guide_legend(ncol=1)) + 
     scale_y_continuous(labels=comma) 
} 

plotfun(df, "Col0") 

enter image description here

+0

Danke, du hast mich wirklich gerettet – juse