强制ggplot2 y轴标签仅为整数,并给出适当的中断

时间:2013-10-22 07:43:58

标签: r ggplot2

我正在绘制离散数据的条形图,ggplot默认为我调整y轴,但是给我y轴标签,间隔为0.5,我不喜欢它。我尝试了scale_y_discrete但是每个离散值都给出了y轴断点,这也不好。

我可以强制y轴中断仅由整数组成,并为每个方面提供适当的中断吗?

示例脚本如下:

set.seed(1)
chart.data <- data.frame(x=rep(LETTERS[1:10],3),
                         y=c(sample(0:10,10,replace=TRUE),
                             sample(0:100,10,replace=TRUE),
                             sample(0:1000,10,replace=TRUE)),
                         group=sort(rep(1:3,10)))
chart <- ggplot(data=chart.data,aes(x=x,y=y))
chart <- chart + geom_bar(stat="identity")
chart <- chart + scale_y_discrete()
chart <- chart + facet_wrap(facets=~group,nrow=1,scale="free_y")

更新#1

由于帖子被认为可能重复,因此脚本会被细化以显示更复杂的场景。

2 个答案:

答案 0 :(得分:21)

首先,由于你的y数据是连续的,你应该使用scale_y_continuous()。在此函数中,您可以添加参数breaks= pretty_breaks()(添加库scales以使用函数pretty_breaks())。如果您未在pretty_breaks()内提供任何数字,那么在这种情况下,您将在y轴上获得整数。您可以设置要显示的中断数,例如pretty_breaks(4)但是对于范围为0-10的第一个方面,它仍将仅显示整数值,并且中断的数量将更大以获得“好”数字

library(scales)
ggplot(data=chart.data,aes(x=x,y=y)) + 
  geom_bar(stat="identity") +  
  facet_wrap(facets=~group,nrow=1,scale="free_y")+
  scale_y_continuous(breaks= pretty_breaks())

答案 1 :(得分:6)

您还可以直接指定函数中的中断。以下是如何执行此操作的几个示例。另请查看?discrete_scale中的break参数。

chart + scale_y_discrete(breaks=function(n) c(0, floor(max(n)/2), max(n)))    
chart + scale_y_discrete(breaks=function(n) n[floor(length(n)/5)*1:5+1])
chart + scale_y_discrete(breaks=function(n) 10^(ceiling(log10(max(n)))-1)*2*0:5)