Mam polecenie ggplot
ggplot( rates.by.groups, aes(x=name, y=rate, colour=majr, group=majr) )
wewnątrz funkcji. Ale chciałbym móc użyć parametru funkcji, aby wybrać kolumnę, która ma być używana jako kolor i grupa. To znaczy, chciałbym coś takiego
f <- function( column ) {
...
ggplot( rates.by.groups, aes(x=name, y=rate, colour= ??? , group=??? ) )
}
Tak więc kolumna używana w ggplot jest określona przez parametr. Np. Dla f ("majr") otrzymujemy efekt
ggplot( rates.by.groups, aes(x=name, y=rate, colour=majr, group=majr) )
ale dla f („gender”) otrzymujemy efekt
ggplot( rates.by.groups, aes(x=name, y=rate, colour=gender, group=gender) )
Kilka rzeczy, których próbowałem:
ggplot( rates.by.groups, aes(x=name, y=rate, colour= columnName , group=columnName ) )
nie działał. Ani też
e <- environment()
ggplot( rates.by.groups, aes(x=name, y=rate, colour= columnName , group=columnName ), environment=e )
aes_string(x = rates.by.groups$name...
, a zresztą nie musisz tego robić, skoro już zdałeśggplot(data = rates.by.groups...
argument. (Problem w tym pytaniu )"column_name"
lub"column"
nie zadziałaZ release notes z
ggplot2 V3.0.0
:Idiomatycznym sposobem byłoby teraz przekonwertowanie na symbol łańcucha, który zawiera zmienna, przy użyciu
sym()
(który jest prawie taki sam jak aliasy bazoweas.name()
/as.symbol()
) i cofnięcie jego cytowania za pomocą!!
Symulując dane OP, które możemy zrobić:
Gdybyśmy woleli podać nieprzetworzone nazwy funkcji, którą możemy wykonać:
Będzie działać z nazwami znanymi jako symbole ORAZ z literałami łańcuchowymi
Jak mówi Lionel
ensym()
:Uwaga dotycząca
enquo()
enquo()
cytuje wyrażenie (niekoniecznie symbol) podane do argumentu, nie konwertuje literału ciągu na symbol, ponieważensym()
może być tutaj mniej dostosowane, ale możemy zrobić:źródło
aes()
sama w sobie mówi,enquo()
ale to nie działa. A kto o kim słyszałensym()
wcześniej? BIGf2
wszystkich czterech przykładów działa, podobnie jak przechwytywanie nazwy kolumny w zmiennej (tjaname <- "mjr"; f2(aname)
.). Jeśli dodam kod do manipulowania ramką danych, używającdplyr
go, próbuje znaleźć kolumnę przy użyciu nazwy zmiennej, a nie ciągu w nazwie zmiennej. Innymi słowy, jak zabrać sięrates.by.groups %>% group_by(!!column)...
do pracy i nadal wspierać te trzy sposoby dzwonieniaf2
?ensym
jest zaprojektowane tak, aby radzić sobie z argumentami podawanymi jako nazwy i tolerować cudzysłowy wokół nich. Uważam, że chciałbyś potraktować argument jako nazwę i wrócić do wartości, jeśli nazwa nie zostanie znaleziona. Tak właśnie dzieje się zselect
, ale nie zgroup_by
… Jest możliwe, aby to obejść, ale nie jest to oczywiste. Jeśli jest to dla ciebie ważne, myślę, że zasługiwałoby na własne pytanie.select
igroup_by
prawdopodobnie to był problem. Mogę utworzyć nowe pytanie, ale muszę podać prosty przykład i sprawdzić, czy udzielono na nie odpowiedzi. Mogę to opublikować, jeśli nie.facet_grid
? Działa z,facet_grid(cols = vars(!!column))
ale zgłasza błądfacet_grid(~ !!column)
Spróbuj użyć
aes_string
zamiastaes
.źródło
Inną opcją (
ggplot2 > 3.0.0
) jest użycie uporządkowanego zaimka oceny,.data
aby wyciąć wybraną zmienną / kolumnę zrates.by.groups
ramki danych.Utworzono 04.04.2019 przez pakiet reprex (v0.2.1.9000)
źródło
Użycie
aes_string
rozwiązuje ten problem, ale napotyka problem podczas dodawania słupków błędówgeom_errorbar
. Poniżej proste rozwiązanie.Bonus, możesz także dodać aspekty do swojego wykresu, używając tych linii wewnątrz ggplot:
Ten skrypt został zmodyfikowany na podstawie tego oryginalnego postu: ggplot2 - Paski błędów przy użyciu funkcji niestandardowej
źródło
Oto niezwykle prosty przykład.
Po prostu zrób dwie rzeczy
!!
kiedy go używaszźródło