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

ggsci包调色板无法映射到ggplot2图表问题求助

你两处代码都存在审美映射位置错误和属性与缩放函数不匹配的问题,修正方案如下:

方法1问题排查与修正

  • 错误点:
    1. fill = n写在了ggplot()的全局参数位置,未放入aes()内,无法完成变量到填充色的映射
    2. geom_col(fill = "black")硬编码了固定填充色,会直接覆盖配色缩放函数的设置
  • 修正后代码:
library(ggsci)
p1 <- TidySymptoms %>% 
      count(word, sort = TRUE) %>% 
      filter(n > 150) %>% 
      # 将fill映射放入aes内部
      ggplot(aes(x = n, y = word, fill = n))+
      # 移除硬编码的fill参数
      geom_col() + 
      labs(x = "Count", y = NULL) + 
      theme_bw() +
      # 若n为连续数值变量,需添加continuous = TRUE参数
      scale_fill_jama(continuous = TRUE)
p1

方法2问题排查与修正

  • 错误点:
    1. colour = word同样未放入aes()内,映射规则不生效
    2. 柱形图geom_col()的主体填充属性为fill,你调用的scale_color_manual仅作用于柱形边框颜色,二者不匹配
    3. pal_jama("default")(5)固定输出5种颜色,需要和你映射的word的水平数量完全一致,否则会报错
  • 修正后代码:
library(ggsci)
# 先计算筛选后word的数量,保证配色数量匹配
word_count <- TidySymptoms %>% 
      count(word, sort = TRUE) %>% 
      filter(n > 150) %>% 
      nrow()

p1 <- TidySymptoms %>% 
      count(word, sort = TRUE) %>% 
      filter(n > 150) %>% 
      # 将fill映射放入aes内部,按word类别匹配填充色
      ggplot(aes(x = n, y = word, fill = word))+
      geom_col() + 
      # 用scale_fill_manual对应fill属性,生成对应数量的JAMA配色
      scale_fill_manual(values = pal_jama("default")(word_count))+
      labs(x = "Count", y = NULL) +
      theme_bw()
p1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:09:00