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

ggplot2多折线图底部双列图例不显示问题求助

解决ggplot双折线图底部双列图例不显示问题

你的代码里图例不显示有两个核心问题:

  1. 两条折线的color参数写在了aes()外面,ggplot无法识别这是需要生成图例的映射关系
  2. 最后用guides(fill=guide_legend(ncol=2))控制图例,但你要调整的是**颜色(colour)**图例,不是填充(fill)图例

修正方案(推荐用长格式数据绘图,更符合ggplot逻辑)

先把宽格式数据转换成ggplot推荐的长格式,再统一映射颜色变量:

# 加载需要的包(未安装先执行 install.packages("tidyr"))
library(tidyr)
library(ggplot2)

# 创建向量
MODEL <- c(78, 47, 101)
CONTROL <- c(80, 46, 100)
Date <- seq(from= as.Date("2003-06-01"), to = as.Date("2003-08-01"), by = "month")

# 合并为数据框
my.df <- data.frame(MODEL, CONTROL, Month = Date)

# 转换为长格式数据
my.df_long <- pivot_longer(my.df, cols = c(MODEL, CONTROL), 
                           names_to = "Group", values_to = "CIMFD")

# 绘图
ggplot(my.df_long, aes(x= Month, y = CIMFD, color = Group)) +
  geom_line(size= 1) +
  scale_y_continuous(limits= c(40, 110), breaks = seq(40,110,10)) +
  scale_x_date(limit=c(as.Date("2003-06-01"),as.Date("2003-08-01")), 
               date_breaks= "1 month", date_labels = "%b") +
  ylab("CIMFD [kg/m²]") + 
  xlab("") +
  theme_bw() + 
  theme(text= element_text(size= 20),
        axis.text= element_text(size= 25, color= "black"),
        legend.position = "bottom") +
  scale_colour_manual("", values = c("MODEL" = "blue", "CONTROL" = "red")) +
  guides(colour=guide_legend(ncol=2))

关键修改点说明

  • 转换长格式:用pivot_longer把MODEL和CONTROL列合并成分组变量,仅需一次geom_line即可绘制两条折线,同时自动映射颜色到分组
  • 颜色映射到aes内部:把color放到ggplot()的aes()里,让ggplot识别需要根据Group变量生成图例
  • 修正guides参数:将guides(fill=...)改为guides(colour=guide_legend(ncol=2)),指定颜色图例为双列布局
  • 简化颜色配置:直接指定分组对应的颜色,长格式数据会自动识别分组,无需额外设置breaks

不转换长格式的替代方案

如果坚持使用原宽格式数据,需将每条折线的color放入各自的aes()内,并手动指定图例映射:

library(ggplot2)

# 创建向量
MODEL <- c(78, 47, 101)
CONTROL <- c(80, 46, 100)
Date <- seq(from= as.Date("2003-06-01"), to = as.Date("2003-08-01"), by = "month")

# 合并为数据框
my.df <- data.frame(MODEL, CONTROL, Month = Date)

# 绘图
ggplot(my.df, aes(x= Month)) +
  geom_line(aes(y= MODEL, color= "MODEL"), size= 1) +  # 将color移入aes
  geom_line(aes(y= CONTROL, color= "CONTROL"), size= 1) +  # 将color移入aes
  scale_y_continuous(limits= c(40, 110), breaks = seq(40,110,10)) +
  scale_x_date(limit=c(as.Date("2003-06-01"),as.Date("2003-08-01")), 
               date_breaks= "1 month", date_labels = "%b") +
  ylab("CIMFD [kg/m²]") + 
  xlab("") +
  theme_bw() + 
  theme(text= element_text(size= 20),
        axis.text= element_text(size= 25, color= "black"),
        legend.position = "bottom") +
  scale_colour_manual("", breaks = c("MODEL", "CONTROL"), 
                      values = c("blue", "red")) +
  guides(colour=guide_legend(ncol=2))  # 调整颜色图例为双列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:05:27