我正在绘制离散数据的条形图,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")
由于帖子被认为可能重复,因此脚本会被细化以显示更复杂的场景。
答案 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)