下面的代码绘制了一个图表,其中颜色的名称以正确的顺序出现在图例中,但颜色本身以相反的顺序出现。为什么呢?
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
答案 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)
输出:
如果您不需要传奇,您也可以将颜色参数放在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)
colour
中的aes
并未直接定义线条的颜色,而是通过将定义的值视为因子将颜色映射到数据。因此,当您将colour
的值设置为red
时,它会将名称red
映射到行的颜色,并将其显示在图例中。它不会将其视为字面颜色。但在aes
之外,它将其视为实际颜色。您还可以查看this answer。