ggplot
通常可以很好地创建有意义的刻度和标签。
但是,我发现在具有很多方面并且可能带有formatter=
语句的情节中,标签趋于变得过于“密集”和叠印,例如在此图片中:
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")
我知道我可以通过向
breaks=
提供scale=
和scale_x_continuous
参数来明确指定刻度的间隔和标签。但是,我正在处理带有许多问题和十几个交叉中断的调查数据,因此需要找到一种自动执行此操作的方法。
有没有一种方法告诉
ggplot
自动计算中断和标签,但是只有很少的量(例如,最小,最大和零点)?编辑:理想情况下,我不想指定最小和最大点,但是以某种方式利用内置的ggplot刻度训练,并使用默认的计算刻度极限。
最佳答案
您可以在调用ggplot时传入诸如min()
和max()
之类的参数,以动态指定中断。听起来您将要在各种各样的数据上应用此方法,因此您可能需要考虑将其通用化为一个函数并弄乱格式,但是这种方法应该可行:
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 = ""))
)
或使用
opts(axis.text.x = theme_text(angle = 90, hjust = 0))
旋转x轴文本以产生如下内容:更新
在最新版本的 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))
关于r - 有没有一种方法可以操作ggplot刻度和标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5380417/