2013-03-17 17 views
59

Próbuję przekazać indeksy kolumn do ggplot jako część funkcji będę używać wielokrotnie. jak:R przechodzą zmienne indeksy kolumn do ggplot2

myplot <- function(df){ 
    ggplot(df, aes(df[, 1], df[, 2])) + geom_point() 
} 

będę zawsze przy użyciu pierwszej kolumny jako mojego zmiennej x, a druga kolumna jak mój zmiennej y, ale nazwy kolumn zmienić między zbiorami danych. Szukałem wszędzie .. Jakieś pomysły?

EDIT:

To jest odpowiedź użyłem:

require(ggplot2) 

myplot <- function(df){ 
    ggplot(df, aes_string(colnames(df)[1], colnames(df)[2])) + geom_point() 
} 
+0

Wygląda na to, że Twój tytuł pytania odpowiada odpowiedzi Paula Hiemstry, co dotyczy używania kolumnowych nazw kolumn. Ale treść twojego pytania dotyczy korzystania z ich indeksu, który jest rzeczywiście duplikatem jako oflagowany. Zalecam zmianę treści Twojego pytania, aby pasowała do odpowiedzi. –

+0

@MaxGhenis Oba przypadki (i więcej) odpowiadają w odpowiedzi Pawła iw komentarzach poniżej. – N8TRO

+0

Widzę to. Niedopasowanie treści jest nadal mylące dla tych, którzy się na to natkną; pytania powinny być konkretne i jednoznaczne. Zmiana może również zapewnić możliwość nieflagowania jako duplikat. –

Odpowiedz

91

Można użyć aes_string w zastępstwie aes przekazać ciąg zamiast korzystania z obiektów, tj:

myplot = function(df, x_string, y_string) { 
    ggplot(df, aes_string(x = x_string, y = y_string)) + geom_point() 
} 
myplot(df, "A", "B") 
myplot(df, "B", "A") 
+0

Dzięki, działa, ale nie jest idealny, ponieważ musiałbym ręcznie podać nazwy kolumn. Jakikolwiek sposób obejść to? – N8TRO

+8

'aes_string (colnames (df) [1], colnames (df) [2])' – baptiste

+0

Ogólnie rzecz biorąc, w 'ggplot2' nie podajesz wektorów w' aes'. W 'Aes' podajesz odwzorowanie estetyki wykresu na kolumny w danych, bez potrzeby kodowania danych w' Aes'. –

Powiązane problemy