ggplot2图例中shape=4的x图标无法显示正确颜色的问题咨询
问题根源
- 叉形标记(
shape=4)仅支持color属性控制颜色,不支持fill属性,你最初将分类变量Var映射到fill,自然无法作用到叉形的颜色显示上。 - 你将
color = colorscheme直接写在geom_segment()、geom_point()的aes()外部,属于固定赋值操作,不会和分类变量Var建立映射关联,因此颜色不会同步到图例中。
修复代码
library(ggplot2) library(RColorBrewer) ## 定义数据框,将Var转为因子固定你需要的排序 df <- data.frame(Var = c("sub","late","unknown","early"), Time = c(10,267,0,1256), Endpoint = c(1533,1523,1256,1256), Startpoint = c(1523,1256,1256,0)) # 固定Var顺序为:early -> unknown -> late -> sub df$Var <- factor(df$Var, levels = c("early","unknown","late","sub")) # 配色顺序和因子levels对应 colorscheme <- RColorBrewer::brewer.pal(9, "Set1")[c(3,2,4,1)] ## 绘制图形 ggplot(df, aes(x="", y=Endpoint, color = Var)) + geom_segment(aes(x="", xend="", y=Startpoint, yend=Endpoint), linewidth = 1) + geom_point(size=5, shape=4, stroke = 2) + # stroke调整叉形线条粗细 scale_color_manual(values = colorscheme) + coord_flip() + # 调整图例,隐藏线段仅保留叉形标记,和绘图元素保持一致 guides(color = guide_legend(override.aes = list(linetype = NA, shape = 4)))
效果说明
修复后图例的叉形标记会自动匹配对应分类的颜色,同时保留你需要的shape=4叉形样式,分类顺序也符合你要求的从左到右early、unknown、late、sub的排列。
内容的提问来源于stack exchange,提问作者Tom Luijts
相关产品推荐
相关产品推荐

