ggplot2:为什么geom_line()图的颜色顺序颠倒了?

时间:2017-09-24 17:50:13

标签: r ggplot2 graph colors

下面的代码绘制了一个图表,其中颜色的名称以正确的顺序出现在图例中,但颜色本身以相反的顺序出现。为什么呢?

year <- 2000:2009
a1 <- 4 + rnorm(10)
a2 <- 3 + rnorm(10)
a3 <- 2 + rnorm(10)
a4 <- 0.25 * rnorm(10)
vv <- tibble(year, a1, a2, a3, a4)

test <- ggplot(data=vv) + aes(x=year) + 
  geom_line(aes(y = a1, colour= "blue")) + 
  geom_line(aes(y = a2, colour= "green")) + 
  geom_line(aes(y = a3, colour= "yellow")) + 
  geom_line(aes(y = a4, colour= "orange")) +
  expand_limits(y=0)

test

2 个答案:

答案 0 :(得分:1)

这里有一些提示。

首先,ggplot按字母顺序读取aes()中指定的颜色作为因素,而不是颜色名称,这会导致它们看起来不按顺序打印(看似错误的颜色)如果你没有列出按顺序排列的颜色。例如,ggplot2包将解释并绘制&#34; blue&#34;,&#34; green&#34;,&#34; yellow&#34;,&#34; orange&#34; as&#34; blue&#34;,&#34; green&#34;,&#34; orange&#34;,&#34; yellow&#34;。除了这个订单更改,它不会使用您提供的值作为绘图的颜色;它使用默认颜色。

您可以采取一些措施来解决这个问题。一种方法是使用scale_colour_manual来阐明颜色的特定顺序和值,如下所示:

ggplot(data=vv) + aes(x=year) + 
  geom_line(aes(y = a1, colour= "blue")) + 
  geom_line(aes(y = a2, colour= "green")) + 
  geom_line(aes(y = a3, colour= "yellow")) + 
  geom_line(aes(y = a4, colour= "orange")) +
  scale_colour_manual(values=c("blue"="blue","green"="green",
                               "yellow"="yellow","orange"="orange"),
                      breaks=c("blue","green","yellow","orange")) +
  scale_x_continuous(breaks=seq(2000, 2009, 3)) +
  expand_limits(y=0)

输出:

enter image description here

如果您不需要传奇,您也可以将颜色参数放在aes()之外,正如@tekrei所解释的那样。对于其他自定义选项,请尝试使用?scale_colour_manual获取更多帮助。

答案 1 :(得分:1)

我认为您可以将colour移出aes以显示正确的行颜色:

test <- ggplot(data=vv) + aes(x=year) + 
        geom_line(aes(y = a1), colour="blue") + 
        geom_line(aes(y = a2), colour="green") + 
        geom_line(aes(y = a3), colour="yellow") + 
        geom_line(aes(y = a4), colour="orange") +
        expand_limits(y=0)

你可以check this answer

colour中的aes并未直接定义线条的颜色,而是通过将定义的值视为因子将颜色映射到数据。因此,当您将colour的值设置为red时,它会将名称red映射到行的颜色,并将其显示在图例中。它不会将其视为字面颜色。但在aes之外,它将其视为实际颜色。您还可以查看this answer