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

在ggplot中手动添加图例:如何正确使用aes?

解决ggplot2中颜色正确且图例正常显示的问题

问题根源

你之前的两种写法都没遵循ggplot2的核心逻辑:颜色美学(color)需要映射到数据中的分类变量,而非直接传入颜色值或常量。

  • 第一种写法把color="grey"放在aes()里,相当于手动创建了一个名为"grey"的分组,ggplot会用默认色板给这个分组分配颜色(不是你指定的grey),所以图例显示但颜色错误。
  • 第二种写法直接设置color="grey"(不在aes里),属于硬编码颜色,没有关联数据变量,因此不会生成图例。
  • 第三种写法虽然加了scale_color_manual(),但同样没有把color映射到数据变量,所以这个刻度设置完全不起作用。

正确解决方案

核心是先给数据新增一个分类变量,标记每个观测的制裁状态,再将这个变量映射到color美学,配合scale_color_manual()指定对应颜色。

步骤1:生成制裁状态分类变量

先用dplyr给数据集新增一个sanction_status字段,明确每个观测属于哪一类:

library(dplyr)

# 新增分类变量,注意顺序:优先级高的条件放前面(比如新发起制裁优先于正在实施)
sanction_combined <- sanction_combined %>%
  mutate(sanction_status = case_when(
    sanction_initiation == "1" ~ "New Sanction Initiation",
    sanction_ongoing == "1" ~ "Ongoing Sanction",
    TRUE ~ "No Sanction"
  ))

步骤2:绘制图表

现在只需要一次geom_point(),将color映射到sanction_status,同时可以按需映射透明度(alpha):

library(ggplot2)

sanc_plot <- ggplot(sanction_combined, aes(x = trade_average, y = partner_cinc, color = sanction_status)) +
  # 坐标轴设置
  scale_x_continuous(trans = 'log2') +
  scale_y_continuous(trans = 'log2', labels = scales::scientific) +
  # 点图层:映射颜色和透明度
  geom_point(size = 1, aes(alpha = sanction_status)) +
  # 手动指定颜色
  scale_color_manual(
    name = "Sanction Status", # 图例标题
    values = c(
      "No Sanction" = "grey",
      "New Sanction Initiation" = "red",
      "Ongoing Sanction" = "yellow"
    )
  ) +
  # 手动指定透明度(可选)
  scale_alpha_manual(
    values = c(
      "No Sanction" = 1,
      "New Sanction Initiation" = 0.7,
      "Ongoing Sanction" = 0.4
    )
  ) +
  # 移除透明度图例(如果不需要)
  guides(alpha = "none") +
  # 标题与坐标轴标签
  labs(
    x = "Log2 of Rolling Average of U.S. Trade with Partner",
    y = "Log2 of Partner Military Power",
    title = "Bilateral Trade Flows, Partner Military Power, and U.S. Sanctions"
  )

# 查看图表
print(sanc_plot)

关键说明

  • 所有需要区分的类别必须通过数据变量映射到美学(color/alpha等),而非多次调用geom_point()硬编码。
  • scale_color_manual()的作用是将你定义的分类标签与对应颜色绑定,前提是已经在aes()中映射了分类变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:12:26