如何在ggplot2密度图中仅调整指定因子层级的线条粗细?
实现指定分组密度图线条加粗及代码优化
一、单独加粗'50 to 65'分组的线条
ggplot 没有scale这个美学映射参数,要实现指定分组线条加粗,可通过映射size美学并手动设置刻度值实现:
- 在
aes中添加size = age_cat_maths关联分组与线条粗细 - 使用
scale_size_manual()为不同分组指定粗细数值,仅给'50 to 65'设置更大的数值
二、代码优化建议
原代码嵌套ifelse生成年龄分组的写法冗余易出错,推荐用cut()函数替代,同时可简化数据处理流程。
修改后的完整代码
# 优化年龄分组生成逻辑 sq <- sq %>% mutate(age_cat_maths = cut(teacher_age_maths, breaks = c(18, 30, 40, 50, 66), labels = c('18 to 29', '30 to 39', '40 to 49', '50 to 65'), include.lowest = TRUE)) %>% drop_na(age_cat_maths) %>% select(age_cat_maths, score_teacher_maths) # 绘制密度图,指定分组线条粗细 ggplot(sq, aes(x = score_teacher_maths, linetype = age_cat_maths, size = age_cat_maths)) + geom_density(adjust = 2, na.rm = TRUE) + # 手动设置线条粗细:仅'50 to 65'加粗,其他用默认粗细 scale_size_manual(values = c('18 to 29' = 1, '30 to 39' = 1, '40 to 49' = 1, '50 to 65' = 2)) + # 可选:隐藏size图例,保持原有图例简洁 guides(size = "none")
补充说明
cut()函数通过断点和标签直接生成分组,比嵌套ifelse更高效易维护scale_size_manual()的values可按需调整,数值越大线条越粗- 添加
guides(size = "none")可避免图例出现多余的粗细标识
内容的提问来源于stack exchange,提问作者Peter Courtney
相关产品推荐
相关产品推荐

