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
相关产品推荐
相关产品推荐

