如何让geom_point像geom_bar一样沿X轴并列显示?
让geom_point像geom_bar一样并列显示的解决方法
我懂你想要的效果——同一年份下不同series的点不再重叠居中,而是像柱状图那样并排分开,对吧?其实这个问题很好解决,核心就是调整点的位置参数,因为geom_bar默认用了position_dodge()来实现并列,而geom_point默认是重叠显示的。
给你两种实用的解决方式:
方法一:直接给geom_point添加position_dodge参数
只需要在geom_point()里加上position = position_dodge(width = 0.5),就能让点自动错开排列。width参数可以根据你的需求调整数值,控制点之间的间距:
library(tidyverse) Q <- as_tibble(data.frame(series = rep(c("diax","diay"),3), value = c(3.25,3.30,3.31,3.36,3.38,3.42), year = c(2018,2018,2019,2019,2020,2020))) %>% select(year, series, value) ggplot(data = Q, mapping = aes(x = year, y = value, color = series)) + geom_point(size = 8, position = position_dodge(width = 0.5))
方法二:将年份转换为分类变量(更贴近geom_bar的逻辑)
如果你的年份是离散的(像示例里只有2018/2019/2020),可以把year转换成因子类型,这样x轴的间距会更适合并列显示,调整width参数的效果也更直观:
ggplot(data = Q, mapping = aes(x = factor(year), y = value, color = series)) + geom_point(size = 8, position = position_dodge(width = 0.8))
简单说,position_dodge()就是让同一x轴分组下的元素(不管是柱子还是点)向两边错开,避免重叠,和geom_bar的默认行为完全一致,你可以多试几个width数值,找到最顺眼的间距~
内容的提问来源于stack exchange,提问作者motabe
相关产品推荐
相关产品推荐

