2017-07-27 67 views
6

Chcę zduplikować lewą oś Y na wykresie ggplot2 po prawej stronie, a następnie zmienić etykiety zaznaczenia dla dyskretnej (jakościowej) osi.Powielanie (i modyfikowanie) dyskretnej osi w ggplot2

Czytałem odpowiedź this question, jednak jak widać on the package's repo page funkcja switch_axis_position() została usunięta z pakietu cowplot (autor cytowany (wkrótce?) Native funkcjonalności ggplot2).

Widziałem stronę reference na osiach wtórnych w ggplot2, jednak wszystkie przykłady w tym dokumencie używają raczej scale_y_continuous niż scale_y_discrete. I rzeczywiście, gdy próbuję użyć funkcji dyskretnej, pojawia się błąd:

Error in discrete_scale(c("y", "ymin", "ymax", "yend"), "position_d", : 
unused argument (sec.axis = <environment>) 

Czy mimo to zrobić z ggplot2? Nawet rozwiązanie całkowicie zhakowane będzie dla mnie wystarczające. Z góry dziękuję. (MRE poniżej)

library(ggplot2) 

# Working continuous plot with 2 axes 
ggplot(mtcars, aes(cyl, mpg)) + 
    geom_point() + 
    scale_y_continuous(sec.axis = sec_axis(~.+10)) 


# Working discrete plot with 1 axis 
ggplot(mtcars, aes(cyl, as.factor(mpg))) + 
    geom_point() 


# Broken discrete plot with 2 axes 
ggplot(mtcars, aes(cyl, as.factor(mpg))) + 
    geom_point() + 
    scale_y_discrete(sec.axis = sec_axis(~.+10)) 
+0

patrząc na źródło 'scale_y_discrete' nie ma opcji/argumentem do określania osi pomocniczej. Więc każde rozwiązanie będzie prawdopodobnie musiało być hackerem. – SymbolixAU

Odpowiedz

6

Weź swój dyskretny czynnik i przedstaw go numerycznie. Następnie możesz ją zwierciadlać i ponownie zaznaczyć kleszcze jako poziomy czynnikowe zamiast liczb.

library(ggplot2) 

irislabs1 <- levels(iris$Species) 
irislabs2 <- c("foo", "bar", "buzz") 

ggplot(iris, aes(Sepal.Length, as.numeric(Species))) + 
    geom_point() + 
    scale_y_continuous(breaks = 1:length(irislabs1), 
        labels = irislabs1, 
        sec.axis = sec_axis(~., 
             breaks = 1:length(irislabs2), 
             labels = irislabs2)) 

Następnie bawić z expand = argumentu w skali ile potrzeba, aby w większym stopniu naśladować domyślny dyskretną skalę.

enter image description here

+1

zgodnie z pomocą ggplot "Domyślne wartości to c (0,05, 0) dla zmiennych ciągłych oraz c (0, 0,6) dla zmiennych dyskretnych." dla mnie expand = c (0,0.6) dało naprawdę fajne wyniki – TobiO