2012-09-27 12 views
7

Próbuję zrobić fabułę z poziome boxplots w ggplot2, które można zrobić tylko przy użyciu coord_flip(). Próbuję też pionowo rozstawić pola, aby pogrupować określone zestawy. Czytałem, że faceting jest zalecany dla tego rodzaju rzeczy, ale jest to niezgodne z coord_flip(), jak możemy zobaczyć tutaj: ggplot2: boxplot with facet_grid and free scale. Zastanawiam się, czy możliwe jest użycie pustych poziomów w celu utworzenia pustych miejsc. Oto co udało mi się zrobić do tej pory:Pozycjonowanie poziome boxplots w ggplot2

d <- diamonds 
library("ggplot2") 
levels(d$cut) <- list(A="Fair", B="Good", "-", C="Very Good", D="Ideal", E="Premium") 
p = ggplot(d, aes(x=cut, y=depth)) 
p + 
    geom_boxplot(color="black", size=0.2) + 
    theme_bw() + 
    scale_x_discrete(breaks = c("A", "B", "-", "C", "D", "E"), drop=FALSE) + 
    coord_flip() 

ph = 2.75 
pw = 4 
ggsave("plot.png", height=ph, width=pw) 

Jak widać, jeśli utworzyć pustą poziom z „-” w nim i umieścić go w scale_x_discrete(), a następnie jakoś dostać pusty wiersz . Problem polega na tym, że mogę dodać tylko jedną spację. Czy ktoś ma jakieś pomysły na temat dodawania spacji między tymi poziomymi polami w pudełku?

Odpowiedz

3

Oto jeden ze sposobów, który pozwoli Ci dodać więcej puste poziomy:

d <- diamonds 
levels(d$cut) <- list(A="Fair", B="Good", " "="space1", C="Very Good", D="Ideal", " "="space2", E="Premium") 
ggplot(d, aes(x=cut, y=depth)) + 
    geom_boxplot(color="black", size=0.2) + 
    theme_bw() + 
    scale_x_discrete(breaks = c("A", "B", " ", "C", "D", " ", "E"), drop=FALSE) + 
    coord_flip() 

Pozostawi znaczniki na przekładkach, a także, choć:

plot with tick marks

Usuwanie wszystkich kleszczy jest prosta przez dodanie:

+ theme(axis.ticks.y = element_line(linetype=0)) 

plot without tick marks

Ale jeśli chcesz, aby usunąć ślady zaznaczyć tylko dla elementów dystansowych, co najmniej jeden sposób (Jestem pewien, że inni) jest to zrobić za pomocą funkcji niestandardowej:

f <- function(x) { 
    x[!x %in% c("A", "B", "C", "D", "E")] <- NA 
    x 
} 

ggplot(d, aes(x=cut, y=depth)) + 
    geom_boxplot(color="black", size=0.2) + 
    theme_bw() + 
    scale_x_discrete(breaks=f, drop=FALSE) + 
    coord_flip() 

plot with some tick marks