r - 分类尺度上 geom_point 的 position_dodge 的垂直等效项
问题描述
当我有一个分类 y 变量时,我想垂直避开重叠的 geom_point。
library(tidyverse)
# all possible points
df <- expand.grid(
y_factor = paste0('factor_',1:5),
x =1:100
)%>%as.tbl
# randomly missing and overlapping points
# every green point has a pink point underneath, and every blue point
# has a green point underneath it.
seed<-1
df_with_overlap<-df%>%
sample_frac(0.5,replace = TRUE)%>%
group_by(y_factor,x)%>%
mutate(n=factor(1:n()))
p<-ggplot(data=df_with_overlap, aes(x=x, y=y_factor, col=n))
p+geom_point()
使用水平躲避position_dodge
不起作用,因为该轴上的数据太拥挤,所以有些点仍然重叠,可视化不清晰。
p+geom_point(position=position_dodge(width=1))+
ggtitle('position_dodge isnt what Im looking for.
\nx-axis too crowded and points still overlap')
position_jitter
有点工作,因为我可以将 x jitter 限制为 0,并控制 y jitter 的程度。但是抖动的随机性使其不那么吸引人。当它们存在时,我可以辨认出这三种颜色。
p+geom_point(aes(col=n), position=position_jitter(width=0, height=0.05))+
ggtitle('Jitter kind of works.
\nIt would work better if it wasnt random
\nlike position_dodge, but vertical dodging')
有没有办法垂直躲避点?
解决方案
感谢@aosmith 的建议ggstance::position_dodgev()
。这正是我一直在寻找的。我增加了过采样,所以效果更明显。
df <- expand.grid(
y_factor = paste0('factor_',1:5),
x =1:100
)%>%as.tbl
seed<-1
df_with_overlap<-df%>%
sample_frac(1.5,replace = TRUE)%>%
group_by(y_factor,x)%>%
mutate(n=factor(1:n()))
ggplot(data=df_with_overlap, aes(x=x, y=y_factor, col=n))+
geom_point(position=ggstance::position_dodgev(height=0.3))
推荐阅读
- r - 在 R 中绘制多个物种积累曲线
- python - 使用systemd在启动时运行.py文件后如何通过SSH访问Raspberrypi?
- r - 在 drc::drm() 中使用限制约束计算 IC50 的最佳方法
- javascript - Three.js:使用点从高度图采样
- docker - 有谁知道如何将 docker 容器指向 ngrok?
- reactjs - React-js 项目部署失败。“服务”未被识别为内部或外部命令
- html - 任何适用指令均未提供 FormControl
- generics - 使用 IMediator .Net Core 2 注入通用命令处理程序时出错
- html - 包含多个重叠 div 的匹配容器
- r - Tidyeval 拼接运算符!!!ggplot 的 aes 失败