同一 ggplot 中单独 geom_line 美学的个别图例

Individual legends for separate geom_line aesthetics in the same ggplot

我是 R 的新手,我正在尝试使用来自 2 个融化数据帧的数据创建一个图。 理想情况下,我会为每个带有各自标题的数据框创建一个图例;但是,我得到的只有一个带有第一美学标题的图例。 我的出发点是:

aerobic_melt <- melt(aerobic, id.vars = 'Distance', variable.name = 'Aerobic')
anaerobic_melt <- melt(anaerobic, id.vars = 'Distance', variable.name = 'Anaerobic')
plot <- ggplot() +
  geom_line(data = aerobic_melt, aes(Distance, value, col=Aerobic)) +
  geom_line(data = anaerobic_melt, aes(Distance, value, col= Anaerobic)) +
  xlim(0, 125) +
  ylab('Energy (J/kg )') +
  xlab('Distance (m)')

结果是

我已经搜索过了,但由于我的能力有限,我一直找不到办法。

我的问题是: 如何创建标题为 'Aerobic' 和 'Anaerobic' 的单独图例,它们应分别引用 A、B、C、F、G、L 和 E、H、I、J、K?

感谢任何帮助。

显然我们没有您的数据,但我创建了一些示例数据,这些数据应与您自己的数据框具有相同的名称和结构,因为它适用于您自己的绘图代码。有关此处使用的数据,请参阅答案的结尾。

如果你想在同一个图上使用两个色标,你可以使用包 ggnewscale。只需在 geom_line 调用之间添加一个 new_scale_color() 调用。我将您的其​​余代码保持原样。

library(ggplot2)
library(ggnewscale)

plot <- ggplot() +
  geom_line(data = aerobic_melt, aes(Distance, value, col=Aerobic)) +
  new_scale_color() +
  geom_line(data = anaerobic_melt, aes(Distance, value, col= Anaerobic)) +
  xlim(0, 125) +
  ylab('Energy (J/kg )') +
  xlab('Distance (m)')

plot


数据

set.seed(1)

aerobic_melt <- data.frame(
  Aerobic = rep(c("A", "B", "C", "F", "G", "L"), each = 120),
  value   = as.numeric(replicate(6, cumsum(rnorm(120)))),
  Distance = rep(1:120, 6))

anaerobic_melt <- data.frame(
  Anaerobic = rep(c("E", "H", "I", "J", "K"), each = 120),
  value   = as.numeric(replicate(5, cumsum(rnorm(120)))),
  Distance = rep(1:120, 5))