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

在R中为仅单组有分数的字母设置不同绘图颜色

解决方案

核心思路是先给数据添加分组标识,区分「仅Group1有值」「仅Group2有值」「两组均有值」三种情况,再通过分层绘图或混合颜色映射的方式实现需求。

步骤1:预处理数据

先计算Group1的排名,并添加分组标识列:

library(dplyr)
library(ggplot2)

# 模拟示例数据(包含Group1/Group2为0的情况)
dummy <- data.frame(
  letter = paste0("a", 1:100),
  Group1 = c(0.0217, 0.0142, 0, 0.0427, runif(96)),
  Group2 = c(0.0196, 0, 0.0118, 0.0389, runif(96))
)

# 计算排名并标记分组
rank_df <- dummy %>%
  mutate(
    rank = order(order(Group1, decreasing = TRUE)),
    category = case_when(
      Group2 == 0 ~ "仅Group1有值",
      Group1 == 0 ~ "仅Group2有值",
      TRUE ~ "两组均有值"
    )
  )

方案一:分层绘图(推荐,逻辑更清晰)

通过分层绘制不同分组的文本,分别指定特殊组的固定颜色,其余组保留基于rank的渐变颜色:

# 若未安装ggnewscale包先运行:install.packages("ggnewscale")
rank_df %>%
  ggplot() +
  # 绘制仅Group1有值的文本,设为红色
  geom_text(
    data = filter(rank_df, category == "仅Group1有值"),
    aes(Group1, Group2, label = letter),
    color = "#E63946"
  ) +
  # 绘制仅Group2有值的文本,设为深蓝色
  geom_text(
    data = filter(rank_df, category == "仅Group2有值"),
    aes(Group1, Group2, label = letter),
    color = "#1D3557"
  ) +
  # 为剩余组开启新的颜色映射
  ggnewscale::new_scale_color() +
  # 绘制两组均有值的文本,用rank的渐变配色
  geom_text(
    data = filter(rank_df, category == "两组均有值"),
    aes(Group1, Group2, label = letter, color = rank)
  ) +
  # 用viridis渐变配色(也可替换为scale_color_gradient自定义渐变)
  scale_color_viridis_c(name = "Group1排名") +
  labs(x = "Group1", y = "Group2") +
  theme_minimal()

方案二:混合颜色映射

将特殊组用固定数值标记,与rank值合并为单一颜色映射,实现离散+连续的混合配色:

# 生成混合颜色键
rank_df <- rank_df %>%
  mutate(
    color_key = case_when(
      category == "仅Group1有值" ~ -1,
      category == "仅Group2有值" ~ -2,
      TRUE ~ rank
    )
  )

rank_df %>%
  ggplot(aes(Group1, Group2, label = letter, color = color_key)) +
  geom_text() +
  scale_color_gradientn(
    colors = c("#1D3557", "#E63946", viridis::viridis(100)),
    breaks = c(-2, -1, min(rank_df$rank), max(rank_df$rank)),
    labels = c("仅Group2有值", "仅Group1有值", "最低排名", "最高排名"),
    name = "类别/排名"
  ) +
  labs(x = "Group1", y = "Group2") +
  theme_minimal()

注意事项

  • 若未安装viridis包,先运行install.packages("viridis")
  • 可根据需求替换示例中的十六进制颜色码,调整为你需要的配色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 10:04:57