【发布时间】:2017-01-16 08:51:02
【问题描述】:
所以这是这个问题的后续:ggplot: aes vs aes_string, or how to programmatically specify column names?
我出于自己的目的调整了这个问题的解决方案,但我在传说中遇到了麻烦。这里我设置了一个例子:
# Set up some example data
colnames <- c(paste0 ( "y", 1:30))
nr <- 5
m1 <- matrix(data = runif(nr * length(colnames)), nrow=nr, ncol=length(colnames))
data <- data.frame(time=1:nr, m1)
names(data) <- c("time", colnames)
# Define groups of columns
s1 <- sample(colnames, 3)
s2 <- sample(colnames[!colnames %in% s1], 3)
s3 <- sample(colnames[!colnames %in% c(s1, s2) ], 3)
s4 <- sample(colnames[!colnames %in% c(s1, s2) ], 3)
# Code to add lines to the graph by column group
add_lines1 <- lapply(s1, function(i) geom_line(aes_q(y = as.name(i)), colour = "red"))
add_lines2 <- lapply(s2, function(i) geom_line(aes_q(y = as.name(i)), colour = "blue"))
add_lines3 <- lapply(s3, function(i) geom_line(aes_q(y = as.name(i)), colour = "orange"))
add_lines4 <- lapply(s4, function(i) geom_line(aes_q(y = as.name(i)), colour = "purple"))
# Draw plots with different column groups
p1 <- ggplot(data, aes(x = time))
p1 <- p1 + add_lines1 + add_lines2
p2 <- ggplot(data, aes(x = time))
p2 <- p2 + add_lines1 + add_lines3 + add_lines4
grid.arrange( p1, p2)
如您所见 - 这会生成一个带有我想要的颜色但不是图例的图表:
所以我可以修改addlines 来尝试解决这个问题(区别在as.name(i) 后面的括号中):
add_lines1 <- lapply(s1, function(i) geom_line(aes_q(y = as.name(i), colour = "red")))
add_lines2 <- lapply(s2, function(i) geom_line(aes_q(y = as.name(i), colour = "blue")))
add_lines3 <- lapply(s3, function(i) geom_line(aes_q(y = as.name(i), colour = "orange")))
add_lines4 <- lapply(s4, function(i) geom_line(aes_q(y = as.name(i), colour = "purple")))
这会给我一个带有图例的图表 - 但现在我已经失去了对颜色的控制。更糟糕的是,图表中的颜色不一致:
我的问题是如何在不失去对线条颜色的控制的情况下将颜色编码的图例添加到上图?
【问题讨论】:
-
花一些时间弄清楚如何将所有数据放入一个带有变量的 data.frame 中,该变量将控制分组和颜色。