You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言ggplot2中geom_dotplot自定义点颜色失效,仅显示黑色点求助

问题诊断与解决方案

你的代码存在几个关键问题,导致图表始终显示黑色点:

1. ggplot映射参数位置错误

你把fill = group_column2写在了aes()的外部括号中,这导致ggplot无法将分组变量与填充颜色建立关联映射。必须将fill参数放在aes()内部。

2. create_color返回值类型错误

colors <- list()创建的是列表结构,但scale_fill_manual需要的是字符向量(最好是与分组名称对应的命名向量),列表会导致颜色无法被正确解析。

3. 未正确匹配geom_dotplot的颜色属性

geom_dotplot的填充色由fill映射控制,轮廓色由colour控制,你之前的尝试可能未对应正确的映射逻辑。


修正后的代码:

1. 修正create_color函数(返回命名字符向量)

create_color <- function(df){
  level <- create_level(df)
  colors <- character(length(level)) # 初始化字符向量,而非列表

  for (i in 1:length(level)) {
    ilevel <- level[i]
    
    if (grepl("5min", ilevel)) {
      colors[i] <- "#77003c"
    } else if (grepl("60min", ilevel)) {
      colors[i] <- "#9804e4"
    } else if (grepl("6h", ilevel)) {
      colors[i] <- "#bd7ebd"
    } else if (grepl("24h", ilevel)) {
      colors[i] <- "#a49787"
    } else {
      colors[i] <- "#000000"
    }
  }
  # 给向量命名,确保与分组level的名称完全匹配
  names(colors) <- level
  return(colors)
}

2. 修正绘图函数的映射逻辑

histo_plot_dotty <- function(df, min, max){
  colors <- create_color(df)
  ylabelling <- as.character(df[[1,3]])
  level <- create_level(df)
  
  plot <- ggplot(df, aes(x = factor(key, level = level), y = values, fill = group_column2)) +
    geom_dotplot(binaxis = "y", stackdir = "center", stackratio = 0.3, binpositions = "all", dotsize = 1) +
    scale_fill_manual(values = colors) +
    scale_y_continuous(limits = c(min, max), expand = c(0.01, 0)) +
    labs(title = "",
         x = "individual",
         y = paste0("(", ylabelling, ")", "/FoV"),
         fill = "dosing") +
    theme(axis.text.x = element_text(angle = -65, vjust = 0.5, hjust=0, size = 8),
          panel.background = element_blank(),
          axis.line = element_line(color = "black"))
  
  print(plot)
  return(plot)
}

额外说明:

  • 如果你的group_column2就是key列,可直接将映射改为fill = factor(key, level = level),确保分组与颜色的命名完全对应。
  • 若需要修改点的轮廓颜色,可在aes()中添加colour = group_column2,并使用scale_colour_manual(values = colors),同时可设置fill = NA让点仅显示轮廓色。

内容的提问来源于stack exchange,提问作者anmuena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 22:57:01