【发布时间】:2022-01-08 05:43:42
【问题描述】:
我有一个用 facet_wrap 创建的图形,可视化了许多组的估计密度。一些组的方差比其他组小得多。这导致某些面板无法读取 x 轴。最小可重现示例:
library(tidyverse)
x1 <- rnorm(1e4)
x2 <- rnorm(1e4,mean=2,sd=0.00001)
data.frame(x=c(x1,x2),group=c(rep("1",length(x1)),rep("2",length(x2)))) %>%
ggplot(.) + geom_density(aes(x=x)) + facet_wrap(~group,scales="free")
这个问题的明显解决方案是增加图形大小,使所有内容都变得可读。但是,面板太多,无法使其成为有用的解决方案。我最喜欢的解决方案是控制轴刻度的数量,例如在所有 x 轴上只允许两个刻度。有没有办法做到这一点?
建议后编辑:
添加+ scale_x_continuous(n.breaks = 2) 看起来应该完全符合我的要求,但实际上并没有:
按照建议的问题Change the number of breaks using facet_grid in ggplot2 中的答案,我最终得到了两个轴刻度,但小数点太多了:
equal_breaks <- function(n = 3, s = 0.5, ...){
function(x){
# rescaling
d <- s * diff(range(x)) / (1+2*s)
seq(min(x)+d, max(x)-d, length=n)
}
}
data.frame(x=c(x1,x2),group=c(rep("1",length(x1)),rep("2",length(x2)))) %>%
ggplot(.) + geom_density(aes(x=x)) + facet_wrap(~group,scales="free") + scale_x_continuous(breaks=equal_breaks(n=3, s=0.05), expand = c(0.05, 0))
【问题讨论】:
-
您在寻找
... + scale_x_continuous(n.breaks = 2)吗? -
我认为他们是,虽然
3可能是最好的! -
@nniloc 从第二个图表中删除刻度
-
这能回答你的问题吗? Increase number of axis ticks
标签: r ggplot2 facet facet-wrap