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

如何在共用depth轴的堆叠折线图中按Depo为数据点单独着色?

解决方案:无重复X轴+按Depo着色的堆叠折线图

我懂你的痛点了——之前两种方法要么重复显示X轴,要么没法给数据点按Depo字段着色。其实只需要稍微改造下melt的思路,把Depo字段保留下来,就能完美实现你想要的效果!

步骤1:正确处理数据(保留Depo关联信息)

之前的melt只把depth设为id变量,导致丢失了每个数据点对应的Depo类别。这次我们把depth和Depo都作为id变量,让L/F/P的每一个数值都和对应的Depo绑定:

# 加载所需包
library(ggplot2)
library(reshape2)

# 你的示例数据
MyData <- data.frame(
  depth = c(67.48, 67.63, 67.73, 67.83, 67.92, 68.06),
  L = c(1.003, 1.004, 1.011, 1.006, 1.003, 1.004),
  F = c(1.063, 1.020, 1.017, 1.007, 1.029, 1.007),
  P = c(1.066, 1.024, 1.028, 1.014, 1.032, 1.011),
  Depo = c("Turb", "Dri", "Dri", "Turb", "Pro", "Pro")
)

# 关键操作:melt时同时保留depth和Depo作为id变量
mm <- melt(MyData, id.vars = c("depth", "Depo"), measure.vars = c("L", "F", "P"))

步骤2:绘制符合要求的堆叠折线图

现在用facet_grid实现无重复X轴的垂直堆叠,同时让折线按系列(L/F/P)区分,数据点按Depo类别着色:

ggplot(mm, aes(x = depth, y = value)) +
  # 绘制折线,用颜色区分L/F/P系列
  geom_line(aes(color = variable), linewidth = 1) +
  # 绘制数据点,用颜色区分Depo类别
  geom_point(aes(color = Depo), size = 3) +
  # 垂直分面堆叠,每个系列占一行,Y轴自适应范围
  facet_grid(variable ~ ., scales = "free_y") +
  # 优化主题:只显示底部X轴,美化细节
  theme_bw() +
  theme(
    strip.background = element_rect(fill = "#f5f5f5"),
    axis.text.x = element_text(hjust = 1)
  ) +
  labs(
    x = "Depth",
    y = "Value",
    color = "Category"
  )

效果说明

  • 三个子图垂直堆叠,仅底部显示一次X轴,每个子图对应L/F/P其中一个系列
  • 折线颜色区分不同数据系列,数据点颜色严格对应Depo的类别(Turb/Dri/Pro)
  • 每个子图的Y轴自动适配对应系列的数据范围,避免数据被不合理压缩或拉伸

这样就完美解决了你之前遇到的两个核心问题,既实现了无重复X轴的堆叠,又满足了数据点按Depo着色的需求!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:47:06