Вы можете передать аргументы, такие как min()
и max()
, при вызове ggplot для динамического определения разрывов.Похоже, вы собираетесь применять это к широкому спектру данных, так что вы можете рассмотреть возможность обобщения этого в функцию и возиться с форматированием, но этот подход должен работать:
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 = ""))
)
или повернутьтекст по оси X с opts(axis.text.x = theme_text(angle = 90, hjust = 0))
для получения чего-то вроде:
Обновление
В последней версии ggplot2 аргументы breaks
и labels
для scale_x_continuous
принимают функции, поэтому можно сделать что-то вроде следующего:
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))