2017-09-24 202 views
1

下面的代碼繪製了一個圖表,其中顏色的名稱以正確的順序出現在圖例中,但顏色本身以相反的順序出現。爲什麼?ggplot2:爲什麼geom_line()圖形的顏色順序顛倒了?

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 

回答

1

我認爲你可以移動colouraes以顯示正確的顏色線條:

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 in aes不直接定義線的顏色,而是通過將定義的值視爲因子將顏色映射到數據。因此,當您將colour的值設置爲red時,它會將名稱red映射到線的顏色,並將其顯示在圖例中。它不會將其視爲字面顏色。但在aes之外它將其視爲實際顏色。您也可以檢查this answer

1

這裏有一些提示。

首先,ggplot按字母順序讀取aes()中指定的顏色,而不是顏色名稱,如果不列出按照所述順序的顏色。例如,ggplot2軟件包將解釋並繪製「藍色」,「綠色」,「黃色」,「橙色」爲「藍色」,「綠色」,「橙色」,「黃色」。除了這次訂單更改外,它不會使用您提供的值作爲繪圖的顏色;它使用默認顏色。

有幾件事你可以做,以解決這個問題。一種方法是使用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獲取更多幫助。