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

lok*_*art 17 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")
Run Code Online (Sandbox Code Playgroud)

更新#1

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

Did*_*rts 22

首先,由于您的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())
Run Code Online (Sandbox Code Playgroud)


sha*_*dow 5

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

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)
Run Code Online (Sandbox Code Playgroud)