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

ggplot中如何为x、y参数传入多列数据绘制密度图

ggplot绘制分组密度图问题解答

核心结论

ggplot2的aes()映射中,x、y参数不支持直接指定多个数据列,单个美学属性仅能对应数据框中的1个字段。

你代码出空白图的直接原因

  • aes()内的x=参数后为空,未传入任何有效映射字段,存在语法错误
  • 仅初始化了ggplot对象,未添加任何几何图层(比如密度图对应的geom_density()),无实际绘图指令
  • 误用xend/yend参数:这两个参数仅为geom_segment()等线段类图层服务,密度图完全不需要这类参数
  • 数据集为宽表结构:你当前每个分组的多组测量值单独占列,不符合ggplot2偏好的长表数据要求,无法直接分组绘图

正确绘图步骤

  1. 先将宽格式的测量数据转换为长格式,把分散在多列的粒径/密度读数整合为单列值,附带分组标记,参考代码:
# 加载依赖包
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"
  )
  1. 调用密度图几何图层绘图,按基因型设置分组配色:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 10:21:26