如何在ggplot2中支持循环绘图?

qdw*_*ang 2 r ggplot2

data <- data.frame(a=1:10, b=1:10 * 2, c=1:10 * 3)

library(ggplot2)

p <- ggplot(NULL, aes(x = 1:10))

# Using for loop will cause the plot only to draw the last line.
for (i in names(data)){
  p <- p + geom_line(aes(y = data[[i]], colour = i))
}

# Lines below works fine.
# p <- p + geom_line(aes(y = data[["a"]], colour = "a"))
# p <- p + geom_line(aes(y = data[["b"]], colour = "b"))
# p <- p + geom_line(aes(y = data[["c"]], colour = "c"))

print(p)
Run Code Online (Sandbox Code Playgroud)

为什么循环绘图不能像我们预期的那样工作?

这是一种懒惰的策划方法吗?

Jak*_*upp 5

你实际上不必循环来获取你的线.您只需要重塑数据并在数据框中实际包含x.您的数据很宽,ggplot2喜欢长数据.这就是你可以在一个图中轻松制作多行的方法.

顺便说一句,你的方法不起作用,因为你p每次迭代时都要替换,最后只有循环的端点.

library(ggplot2)
library(tidyr)

data <- data.frame(x = 1:10, a=1:10, b=1:10 * 2, c=1:10 * 3)

df <- gather(data, name, value, -x)

ggplot(df, aes(x = x, y = value, color = name)) +
   geom_line()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述