Ответ 1
Вы можете передать аргументы, такие как 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))