ggplot中如何为x、y参数传入多列数据绘制密度图
ggplot绘制分组密度图问题解答
核心结论
ggplot2的aes()映射中,x、y参数不支持直接指定多个数据列,单个美学属性仅能对应数据框中的1个字段。
你代码出空白图的直接原因
aes()内的x=参数后为空,未传入任何有效映射字段,存在语法错误- 仅初始化了ggplot对象,未添加任何几何图层(比如密度图对应的
geom_density()),无实际绘图指令 - 误用
xend/yend参数:这两个参数仅为geom_segment()等线段类图层服务,密度图完全不需要这类参数 - 数据集为宽表结构:你当前每个分组的多组测量值单独占列,不符合ggplot2偏好的长表数据要求,无法直接分组绘图
正确绘图步骤
- 先将宽格式的测量数据转换为长格式,把分散在多列的粒径/密度读数整合为单列值,附带分组标记,参考代码:
# 加载依赖包 library(ggplot2) library(tidyr) library(dplyr) # 读取数据 crop.data6 <- read.csv("barleygt25.csv", header = TRUE) # 宽转长:保留genotype列作为分组依据,其余测量列转换为长格式 crop_data_long <- crop.data6 %>% pivot_longer( cols = -genotype, names_to = "measure_rep", values_to = "particle_size" )
- 调用密度图几何图层绘图,按基因型设置分组配色:
ggplot(crop_data_long, aes(x = particle_size, color = genotype, fill = genotype)) + geom_density(alpha = 0.25) + # alpha设置填充透明度,方便查看重叠区域 labs(x = "颗粒粒径", y = "密度")
如果你要绘制的是密度值为x轴、粒径为y轴的对应关系曲线,只需在长表中分别保留密度、粒径对应的字段,替换为
geom_line()图层即可,不需要使用密度统计变换。
内容的提问来源于stack exchange,提问作者Maany Ramanan
相关产品推荐
相关产品推荐

