r - 有没有一种方法可以操作ggplot刻度和标签?

标签 r ggplot2

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 中,breakslabelsscale_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/

相关文章:

r - 在 R 中使用 TM 包的 VCorpus 时遇到错误

r ggplot 动态使用 plotmath 表达式

r - ggplot - 不使用 for 循环绘制列表中的项目

r - 函数中的术语是什么意思?

r - 如何计算R中data.table中出现的组合

R:关于优化的问题 - 优化中的函数值无效

r - 如何将轴放在图形后面?

r - ggplot2:适合 geom_smooth() 像分类变量是连续的

r - ggplot2 中不同颜色的分组条形图

r - ggplot geom_bar() 填充绘图上的不着色条