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")
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.
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:
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))
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