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

如何将ggplot图例的颜色标签移至右侧对应图片下方?

问题与解决方案

问题描述

现有代码生成左侧散点图、右侧竖排图片的排版效果,希望将散点图中的分组颜色标签(如Frink1/Frink2/Frink3)移至右侧对应图片的下方,且方案需支持更多分组的场景。

修改后的实现代码

#### Load Libraries ####
library(tidyverse)
library(ggpubr)
library(magick)
library(ggtext) # 用于生成带颜色的文本标签

#### 定义分组配置(支持任意数量分组) ####
group_config <- tibble(
  group_name = c("Frink1", "Frink2", "Frink3"),
  group_color = c("lightblue", "steelblue", "navyblue"),
  # 对应原数据的分组值,这里匹配iris的三个物种
  data_group = unique(iris$Species)
)

#### Create Main Plot(移除图例) ####
main <- iris %>% 
  ggplot(aes(x=Petal.Width,
             y=Petal.Length,
             color=Species))+
  geom_point()+
  geom_smooth(method = "lm")+
  theme(legend.position = "none")+ # 移除原有图例,避免重复
  labs(x="Frink Width",
       y="Frink Height")+
  scale_color_manual(
    breaks = group_config$data_group,
    values = group_config$group_color
  )
main

#### Import Image ####
imp <- image_read("https://jeroen.github.io/images/frink.png")

#### 批量生成图片+对应颜色标签的组合图 ####
create_img_with_label <- function(name, color) {
  # 生成图片层
  img_plot <- image_ggplot(imp)
  
  # 生成带颜色的标签文本层
  label_plot <- ggplot() +
    geom_textbox(
      aes(label = paste0("<span style='color:", color, "'>", name, "</span>")),
      size = 5,
      box.color = NA,
      fill = NA
    ) +
    theme_void()
  
  # 合并图片和标签
  ggarrange(img_plot, label_plot, ncol = 1, heights = c(4, 1))
}

# 循环生成所有分组的图片-标签组合
img_label_plots <- pmap(group_config, create_img_with_label)

#### 排列右侧所有图片-标签组合 ####
ps <- ggarrange(plotlist = img_label_plots, ncol = 1)

#### 合并主图和右侧组合 ####
final_plot <- ggarrange(main, ps, widths = c(2, 1))
final_plot

关键实现说明

  • 移除主图图例:通过theme(legend.position = "none")去掉原散点图的图例,避免和右侧标签重复
  • 批量生成组合图:用pmap配合自定义函数create_img_with_label,自动为每个分组生成“图片+对应颜色标签”的组合,新增分组只需在group_config中添加条目即可
  • 带颜色的标签:借助ggtext包的geom_textbox,生成对应分组颜色的文本标签,保证和散点图颜色一致
  • 灵活排版:通过ggarrange的widths参数调整主图和右侧区域的宽度比例,适配不同场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:02:24