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)
为什么循环绘图不能像我们预期的那样工作?
这是一种懒惰的策划方法吗?
你实际上不必循环来获取你的线.您只需要重塑数据并在数据框中实际包含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)