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

R语言使用ggplot绘制ECDF图时自定义颜色图例无法正常显示问题

你当前代码无法生成图例的核心原因是col参数写在了aes()外部,属于手动固定每条线的颜色,ggplot不会将这类固定样式映射为图例元素。同时你的数据是宽结构,不符合ggplot优先适配的长数据结构,也会增加图例设置的复杂度。

以下是两种可行的解决方法:

方法1:先转换为长表再绘图(更符合ggplot规范,推荐)

先将宽格式的产量数据转换为长格式,再将颜色映射到品种维度,即可自动生成对应配色的图例:

# 加载需要的包
library(ggplot2)
library(dplyr)
library(tidyr)

# 转换为长表
abc_long <- abc %>%
  # 提取三个品种的产量列
  select(y_soubatimi, y_tiandougou_coura, y_local) %>%
  pivot_longer(
    cols = everything(),
    names_to = "variety",
    values_to = "yield"
  ) %>%
  # 转换为你需要的品种显示名
  mutate(variety = case_when(
    variety == "y_soubatimi" ~ "soubatimi",
    variety == "y_tiandougou_coura" ~ "tiandougou-coura",
    variety == "y_local" ~ "local"
  ))

# 绘图
ggplot(abc_long, aes(x = yield, color = variety)) +
  geom_line(stat = "ecdf", linewidth = 1) +
  labs(x = "Yields,kg/ha", y = "Probability", color = "") +
  # 手动指定你需要的配色
  scale_color_manual(
    values = c("soubatimi" = "green", "tiandougou-coura" = "blue", "local" = "red")
  ) +
  theme_bw() +
  theme(
    panel.grid.major.y = element_blank(), 
    axis.text.x = element_text(size=10), 
    axis.text.y = element_text(size=10), 
    legend.text =element_text(size=10)
  )

方法2:不修改数据结构,直接调整参数

如果不想转换数据结构,可以将col参数放到每个geom_line的aes()内部,赋值为对应的品种名,再手动关联颜色即可:

ggplot() +
  geom_line(data=abc,aes(x=y_soubatimi, col="soubatimi"), stat="ecdf") +
  geom_line(data=abc,aes(x=y_tiandougou_coura, col="tiandougou-coura"), stat="ecdf") +
  geom_line(data=abc,aes(x=y_local, col="local"), stat="ecdf") +
  labs(x= "Yields,kg/ha",y = "Probability", color = "") +
  scale_colour_manual(
    values = c("soubatimi" = "green", "tiandougou-coura" = "blue", "local" = "red")
  ) +
  theme_bw() +
  theme(
    panel.grid.major.y = element_blank(), 
    axis.text.x = element_text(size=10), 
    axis.text.y = element_text(size=10), 
    legend.text =element_text(size=10)
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:39:00