19

我正在为离散数据绘制条形图,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

由于该帖子被认为可能是重复的,因此对脚本进行了改进以显示更复杂的场景。

4

2 回答 2

26

首先,由于您的 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())
于 2013-10-22T08:08:00.797 回答
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)
于 2013-10-22T08:21:29.363 回答