线图的重叠图例

问题描述 投票:0回答:1

我想将每条线显示为具有不同的颜色和形状,这应该反映在图例上。基本上,它应该看起来像这样My Goal

我可以使用以下代码使颜色和点样式独一无二。

data <- data.frame("1" = c(1, 3, 6, 4), "2" = c(2, 9, 2, 8))
colnames(data) <- paste0("", c(1,2))

power_1 <- factor(c(0,0.25,0.33,"Period"))

density_vs_power <- ggplot(data = as.data.frame(data))


# Loop to add geom_line layers for each column
for (i in 1:2) {
  density_vs_power <- density_vs_power +
    geom_line(aes(x = power_1, y = !!sym(as.character(i)), group = 1, color = as.character(i))) +
    geom_point(shape = i, aes(x = power_1, y = !!sym(as.character(i)), color = as.character(i)))
}

density_vs_power <- density_vs_power +
  scale_y_continuous(trans = "log10") +
  theme_classic()


density_vs_power

但是,这并没有显示图例,如此处所示different color but not legend。我知道如果我将颜色属性放入 aes() 中,应该会出现一个图例。当我尝试使用以下代码时,


data <- data.frame("1" = c(1, 3, 6, 4), "2" = c(2, 9, 2, 8))
colnames(data) <- paste0("", c(1,2))

power_1 <- factor(c(0,0.25,0.33,"Period"))

density_vs_power <- ggplot(data = as.data.frame(data))


# Loop to add geom_line layers for each column
for (i in 1:2) {
  density_vs_power <- density_vs_power +
    geom_line(aes(x = power_1, y = !!sym(as.character(i)), group = 1, color = as.character(i))) +
    geom_point(shape = i, aes(x = power_1, y = !!sym(as.character(i)), color = as.character(i)))
}

density_vs_power <- density_vs_power +
  scale_y_continuous(trans = "log10") +
  theme_classic()


density_vs_power

图例重叠,如下所示legend but overlapping features。如何使图例每行分开并基本上显示“Object #”格式?

非常感谢任何帮助!

r ggplot2 plot rstudio legend
1个回答
0
投票

实现所需结果的最简单方法是将数据重塑为长或整齐的格式,这也可以摆脱

for
循环:

library(ggplot2)

data_long <- data |>
  dplyr::mutate(power1 = power_1) |>
  tidyr::pivot_longer(
    -power1,
    names_to = "group"
  )

ggplot(
  data = data_long,
  aes(power1, value, color = factor(group), group = group)
) +
  geom_line() +
  geom_point(aes(shape = factor(group))) +
  scale_y_continuous(trans = "log10") +
  theme_classic()

© www.soinside.com 2019 - 2024. All rights reserved.