如何用ggplot为散点图的雌雄跗骨长度变量设置不同颜色/形状?
无需修改原数据实现ggplot雌雄跗骨长度颜色区分
以下两种方法都不需要修改原datos数据框,直接在绘图环节实现雌雄数值的颜色/形状区分:
方法1:临时转长格式映射颜色(推荐,自动生成规范图例)
利用tidyr::pivot_longer在绘图时将宽格式数据临时转换为长格式,自动生成性别变量用于颜色映射:
library(tidyr) library(ggplot2) ggplot(pivot_longer(datos, cols = c(Log10.Tarso.H, Log10.Tarso.M), # 指定雌雄对应的列 names_to = "Sex", values_to = "Tarso_Length"), aes(x = Species, y = Tarso_Length, color = Sex)) + geom_point(size = 3) + labs(x = "物种", y = "跗骨长度(Log10转换后)", title = "雌雄跗骨长度对比", color = "性别") + scale_color_manual(values = c("Log10.Tarso.H" = "#ff6b6b", "Log10.Tarso.M" = "#4ecdc4"), labels = c("雌性", "雄性"))
方法2:分两次调用geom_point手动指定样式
如果不想转换数据格式,可以分别绘制雌雄两列的点,手动设置颜色和形状:
library(ggplot2) ggplot(datos) + # 绘制雌性跗骨长度点 geom_point(aes(x = Species, y = Log10.Tarso.H), color = "#ff6b6b", shape = 16, size = 3) + # 绘制雄性跗骨长度点 geom_point(aes(x = Species, y = Log10.Tarso.M), color = "#4ecdc4", shape = 17, size = 3) + labs(x = "物种", y = "跗骨长度(Log10转换后)", title = "雌雄跗骨长度对比") + # 手动构建图例 scale_color_discrete(name = "性别", breaks = c("雌性", "雄性"), values = c("#ff6b6b", "#4ecdc4")) + guides(color = guide_legend(override.aes = list(shape = c(16, 17))))
若需保留原散点图形式(x=雌,y=雄)
如果要维持你原代码中x=Log10.Tarso.H, y=Log10.Tarso.M的配对散点形式,可以根据雌雄数值的差异设置颜色:
ggplot(datos, aes(x = Log10.Tarso.H, y = Log10.Tarso.M, color = Log10.Tarso.H > Log10.Tarso.M)) + geom_jitter(size = 3) + labs(x = "雌性跗骨长度(Log10)", y = "雄性跗骨长度(Log10)", title = "雌雄跗骨长度独立对比", color = "雌性长度 > 雄性长度") + scale_color_manual(values = c("FALSE" = "#4ecdc4", "TRUE" = "#ff6b6b"))
内容的提问来源于stack exchange,提问作者RogelioSNT
相关产品推荐
相关产品推荐

