R ggplot使用facet_grid时如何实现geom_point仅沿x轴方向闪避
问题原因
position_dodge()/position_dodge2()默认会将绘图映射中所有离散变量的交互项作为分组依据,同时自动适配闪避方向,你当前代码的x轴(color)和y轴(cut)都是离散变量,因此闪避逻辑会同时调整两个轴的点位置。
解决方案
方案1:指定闪避方向(适配ggplot2 3.3.0及以上版本)
直接在position_dodge2中添加orientation = "x"参数,强制闪避仅沿x轴生效即可,同时注意你原代码的mutate调用缺少右括号,修正后完整代码如下:
library(ggplot2) library(dplyr) dmnd_data <- diamonds %>% head(100) %>% mutate(grade = ifelse(cut %in% c("Premium", "Very Good"), "High-quality", "low-quality")) dmnd_data %>% ggplot(aes(color, cut, size = price)) + geom_point(alpha = 0.7, position = position_dodge2(width = 0.5, orientation = "x")) + facet_grid(grade~., space = "free", scales = "free")
方案2:显式指定分组变量(适配所有版本)
如果你的ggplot2版本较低不支持orientation参数,可以显式指定group映射为y轴的cut变量,告诉闪避逻辑仅在同一个y轴分组内沿x轴调整位置:
dmnd_data %>% ggplot(aes(color, cut, size = price, group = cut)) + geom_point(alpha = 0.7, position = position_dodge2(width = 0.5)) + facet_grid(grade~., space = "free", scales = "free")
两种方案都可以实现点仅沿x轴闪避,y轴位置和对应cut水平对齐的效果。
内容的提问来源于stack exchange,提问作者Lokeshwaran Manoharan
相关产品推荐
相关产品推荐

