为ggplot密度图指定自定义线条颜色并调整图例样式
解决方法:自定义密度线条颜色与图例符号调整
1. 模拟可复现数据
先构造包含9个模型的示例数据集,方便后续测试:
library(ggplot2) set.seed(123) # 确保结果可复现 # 生成9个模型的模拟数据 model_data <- data.frame( value = c(rnorm(500, mean = 0, sd = 1), rnorm(500, mean = 0.5, sd = 1.2), rnorm(500, mean = -0.3, sd = 0.8), rnorm(500, mean = 1, sd = 0.9), rnorm(500, mean = -1, sd = 1.1), rnorm(500, mean = 0.2, sd = 0.7), rnorm(500, mean = -0.7, sd = 1.3), rnorm(500, mean = 0.8, sd = 0.6), rnorm(500, mean = -0.5, sd = 0.9)), model = rep(paste0("Model_", 1:9), each = 500) )
2. 定义自定义颜色向量
指定9种区分度较高的对应颜色,你可以根据需求自行替换:
line_col <- c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7", "#999999", "#000000")
3. 绘制仅带线条的密度图并调整图例
使用geom_density并设置fill = NA只保留线条,同时通过guides()修改图例符号为线条:
ggplot(model_data, aes(x = value, color = model)) + geom_density(fill = NA, size = 1) + # 仅显示密度线条,去掉填充 scale_color_manual(values = line_col) + # 应用自定义颜色向量 guides(color = guide_legend(override.aes = list(linetype = 1, shape = NA))) + # 图例符号改为线条 theme_minimal() + labs(x = "Value", y = "Density", title = "Density Plot of 9 Models (Lines Only)")
关键说明
geom_density(fill = NA):移除直方图填充色,仅保留密度线条轮廓scale_color_manual(values = line_col):将自定义颜色映射到每个模型guides(color = guide_legend(override.aes = list(linetype = 1, shape = NA))):强制图例显示线条符号,替换默认的填充方块;shape = NA隐藏默认点符号,linetype = 1设置为实线
如果你的原始数据是宽格式(每个模型为单独列),可先通过tidyr::pivot_longer转换为长格式,再套用上述代码绘制。
内容的提问来源于stack exchange,提问作者climsaver
相关产品推荐
相关产品推荐

