Czy istnieje sposób na manipulowanie podziałkami skali ggplot i etykietami?

ggplot ogólnie robi dobrą robotę tworzenia sensownych przerw i etykiet w skalach.

Uważam jednak, że w fabule z wieloma aspektami i być może formatter= stwierdzeniem, etykiety mają tendencję do zbyt "gęstego" i nadruku, na przykład na tym zdjęciu: {]}

df <- data.frame(
        fac=rep(LETTERS[1:10], 100),
        x=rnorm(1000)
)

ggplot(df, aes(x=x)) + 
  geom_bar(binwidth=0.5) + 
  facet_grid(~fac) + 
  scale_x_continuous(formatter="percent")

Tutaj wpisz opis obrazka

Wiem, że mogę jednoznacznie określić podziałki i etykiety skal, podając breaks= i scale= argumenty scale_x_continuous.

Jednak przetwarzam dane ankietowe z wieloma pytaniami i tuzinem Krzyżówki, więc trzeba znaleźć sposób, aby to zrobić automatycznie.

Czy istnieje sposób, aby ggplot obliczyć przerwy i etykiety automatycznie, ale po prostu mieć mniej, powiedzmy w punkcie minimalnym, maksymalnym i zerowym?

EDIT: idealnie, Nie chcę określać minimalnych i maksymalnych punktów, ale jakoś wykorzystać wbudowany trening ggplot skal i użyć domyślnych limitów skalowania.

 30
Author: Andrie, 2011-03-21

1 answers

Możesz przekazać argumenty takie jak min() i max() w wywołaniu do ggplot, aby dynamicznie określić przerwy. Wygląda na to, że będziesz stosować to w wielu różnych danych, więc możesz rozważyć uogólnienie tego na funkcję i bałagan w formatowaniu, ale to podejście powinno działać: {]}

ggplot(df, aes(x=x)) + 
  geom_bar(binwidth=0.5) + 
  facet_grid(~fac) + 
  scale_x_continuous(breaks = c(min(df$x), 0, max(df$x))
    , labels = c(paste( 100 * round(min(df$x),2), "%", sep = ""), paste(0, "%", sep = ""), paste( 100 * round(max(df$x),2), "%", sep = ""))
    )

Lub Obróć tekst w osi x za pomocą opts(axis.text.x = theme_text(angle = 90, hjust = 0)), aby stworzyć coś w stylu:

Tutaj wpisz opis obrazka

Update

W najnowszej wersji ggplot2 argumenty breaks i labels do scale_x_continuous akceptują funkcje, więc można zrobić coś takiego:

myBreaks <- function(x){
    breaks <- c(min(x),median(x),max(x))
    names(breaks) <- attr(breaks,"labels")
    breaks
}

ggplot(df, aes(x=x)) + 
  geom_bar(binwidth=0.5) + 
  facet_grid(~fac) + 
  scale_x_continuous(breaks = myBreaks,labels = percent_format()) + 
  opts(axis.text.x = theme_text(angle = 90, hjust = 1,size = 5))
 25
Author: Chase,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-02 21:32:46