ggplot为82组文献数据分配唯一符号时遇数量不足问题求助
ggplot绘制多参考文献对比图的问题与解决方法
问题描述
需要绘制线性回归计算值与82篇论文实验值的对比图,尝试为每篇论文的点分配唯一符号,但仅整理出45个美观的唯一符号。现有symbols、Palette、borders列表及绘图代码如下:
symbols <- c(21, 22, 23, 24, 25, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 21, 22, 23, 24, 25, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 21, 22, 23, 24, 25) Palette <- c("#1A118E", "#136520", "#10BFBF", "#D8CB2B", "#FFFF00", "#FF9900", "#0ADCF2", "#136330", "#FF0000", "#600D91", "#00FF00", "#FF00CC", "#FFCC00", "#1A118E", "#136520", "#10BFBF", "#D8CB2B", "#FFFF00", "#FF9900", "#0ADCF2", "#136330", "#FF0000", "#600D91", "#00FF00", "#FF00CC", "#FFCC00", "#1A118E", "#136520", "#10BFBF", "#D8CB2B", "#FFFF00", "#FF9900", "#0ADCF2", "#136330", "#FF0000", "#600D91", "#00FF00", "#FF00CC", "#FFCC00", "#1A118E", "#136520", "#10BFBF", "#D8CB2B", "#FFFF00", "#FF9900", "#0ADCF2", "#136330", "#FF0000", "#600D91", "#00FF00", "#FF00CC", "#FFCC00") borders <- c("#000000", "#000000", "#000000","#000000", "#000000", "#FF9900", "#0ADCF2", "#136330", "#FF0000", "#600D91", "#00FF00", "#FF00CC", "#FFCC00", "#1A118E", "#136520", "#10BFBF", "#D8CB2B", "#FFFF00", "#FF9900", "#0ADCF2", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000", "#000000","#000000", "#000000", "#FF9900", "#0ADCF2", "#136330", "#FF0000", "#600D91", "#00FF00", "#FF00CC", "#FFCC00", "#1A118E", "#136520", "#10BFBF", "#D8CB2B", "#FFFF00", "#FF9900", "#0ADCF2", "#000000", "#000000", "#000000", "#000000", "#000000","#000000", "#000000", "#000000","#000000", "#000000", "#FF9900", "#0ADCF2", "#136330", "#FF0000", "#600D91", "#00FF00", "#FF00CC", "#FFCC00", "#1A118E", "#136520", "#10BFBF", "#D8CB2B", "#FFFF00", "#FF9900", "#0ADCF2", "#000000", "#000000", "#000000", "#000000", "#000000")
绘图代码:
ggplot(df_select_Si) + geom_point(aes(x = logDsi, y = predictSi, color = ref, shape = ref, fill = ref), size = 2) + scale_shape_manual(values = symbols) + scale_fill_manual(values = Palette) + scale_colour_manual(values = borders)+ geom_abline(intercept = 0, slope = 1, size=1)
其中ref为参考文献列表,运行后报错:
Error in
palette():
! Insufficient values in manual scale. 82 needed but only 45 provided.
Runrlang::last_error()to see where the error occurred.
需解决符号、调色板和边框数量不足的问题,或寻找替代方案。
解决方法
1. 扩展视觉标识列表
ggplot支持的形状编号为0-25,其中21-25为可填充形状。可通过循环重复基础形状,并搭配不同颜色组合生成82组唯一标识:
# 生成82个形状(循环重复0-25) symbols_extended <- rep(c(0:25), length.out = 82) # 生成82个高区分度填充色 Palette_extended <- scales::hue_pal()(82) # 边框色设置:可填充形状用黑色边框,其他形状用与填充色一致的边框 borders_extended <- ifelse(symbols_extended %in% 21:25, "#000000", Palette_extended) # 替换原绘图代码中的对应参数 ggplot(df_select_Si) + geom_point(aes(x = logDsi, y = predictSi, color = ref, shape = ref, fill = ref), size = 2) + scale_shape_manual(values = symbols_extended) + scale_fill_manual(values = Palette_extended) + scale_colour_manual(values = borders_extended)+ geom_abline(intercept = 0, slope = 1, size=1)
2. 拆分区分维度
放弃单一维度区分,将形状用于大类别分组(如期刊、年份区间),颜色用于区分单篇参考文献:
# 先给参考文献按年份分组 df_select_Si <- df_select_Si %>% mutate(ref_group = cut(year, breaks = 5)) # 按年份分成5组 ggplot(df_select_Si) + geom_point(aes(x = logDsi, y = predictSi, color = ref, shape = ref_group, fill = ref), size = 2) + scale_shape_manual(values = c(21,22,23,24,25)) + # 给每组分配唯一形状 scale_fill_manual(values = scales::hue_pal()(82)) + scale_colour_manual(values = rep("#000000",82)) + # 统一黑色边框 geom_abline(intercept = 0, slope = 1, size=1)
3. 改用交互式图表
用plotly制作交互式图表,鼠标hover时显示参考文献信息,无需依赖视觉区分:
library(plotly) # 绘制基础ggplot p <- ggplot(df_select_Si) + geom_point(aes(x = logDsi, y = predictSi, text = paste("参考文献:", ref)), size = 2) + geom_abline(intercept = 0, slope = 1, size=1) # 转为交互式图表 ggplotly(p, tooltip = "text")
4. 简化视觉标识+辅助标注
用统一形状+颜色区分,同时为每个点添加参考文献编号标注:
# 给每个参考文献分配唯一编号 df_select_Si <- df_select_Si %>% mutate(ref_id = as.integer(factor(ref))) ggplot(df_select_Si) + geom_point(aes(x = logDsi, y = predictSi, color = factor(ref_id)), size = 2) + geom_text(aes(x = logDsi, y = predictSi + 0.1, label = ref_id), size = 3) + # 标注编号 scale_color_viridis_d(option = "plasma") + # 用渐变颜色提高区分度 geom_abline(intercept = 0, slope = 1, size=1)
内容的提问来源于stack exchange,提问作者Ruben Keane
相关产品推荐
相关产品推荐

