【问题标题】:ggplot legend colours in complex plot复杂图中的ggplot图例颜色
【发布时间】: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 中,该变量将控制分组和颜色。

标签: r ggplot2 legend


【解决方案1】:

geom_line 调用中的aes 中的colour= 调用更改为您希望出现在图例中的任何内容:

add_lines1 <- lapply(s1, function(i) geom_line(aes_q(y = as.name(i), colour = "Line1")))
add_lines2 <- lapply(s2, function(i) geom_line(aes_q(y = as.name(i), colour = "Line2")))
add_lines3 <- lapply(s3, function(i) geom_line(aes_q(y = as.name(i), colour = "Line3")))
add_lines4 <- lapply(s4, function(i) geom_line(aes_q(y = as.name(i), colour = "Line4")))

然后将scale_color_manual() 添加到完整的ggplot 调用中以获得一致的颜色(您选择)

p1 <- ggplot(data, aes(x = time)) + scale_color_manual(values=c("orange","yellow","white","green"))
p1 <- p1 + add_lines1 + add_lines2

p2 <- ggplot(data, aes(x = time)) + scale_color_manual(values=c("orange","yellow","white","green"))
p2 <- p2 + add_lines1 + add_lines3 + add_lines4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 2021-08-31
    • 2016-06-14
    • 2013-09-02
    • 1970-01-01
    相关资源
    最近更新 更多