2017-10-04 70 views
1

我有一個數據框,其中包含一組製造商併爲這些製造商收集數據。根據運行情況,製造商和/或屬性數據列表可能會發生變化。 我在ggplot中將其顯示爲折線圖,但我想要的是讓圖例順序與數據最後一年的「向上/向下」順序相匹配。因此,對於這個圖表: Default Legend Orderr ggplot更改圖例順序以匹配數據的最終訂單

我想看看傳說中的順序(和顏色)是Yoyodyne(紫色),小工具(綠色),旺卡(藍色)和阿克米(紅色)。 我不能(或者不認爲我可以)使用scale_color_manual,因爲從一個模型運行到下一個結束順序(在2032年)的數據輸入可能不同和/或製造商列表可能不同。

代碼做圖表(最後一部分,PZ,只是爲了簡化X軸顯示):

px <- ggplot(bym, aes(x=Model.Year, y=AverageCost, colour=Manufacturer)) 
py <- px + ggtitle("MyChart") + labs(x="Year", y="Foo") + geom_line(size=0.5) + geom_point() 
pz <- py + scale_x_continuous(breaks=c(min(bym$Model.Year),max(bym$Model.Year))) 
pz 

回答

1

你試過根據去年設置級別製造商?例如,你可以用這種方法設置級別添加一列:

# order Manufacturer by AverageCost in the last year 
colours = bym[with(bym[bym$Model.Year == 2032,], order(-AverageCost)),]$Manufacturer 
# add factor with levels ordered by colours 
bym$Colour = factor(bym$Manufacturer, levels=as.character(colours)) 

然後使用Colourcolour美感。

編輯:也就是說,如果你想堅持基地R.與dplyr::mutate的答案是更容易使用。

1

可以使用dplyr::mutate函數和factor函數一起設置圖例對象的順序。要按所需順序設置顏色,可以按照所需順序創建具有所需顏色的矢量,並將它們傳遞到scale_color_manual。我在下面的例子中做了這個。我的看起來和你有點不同,因爲我刪除了中間任務。

bym <- data.frame(
    Model.Year = rep(seq(2016, 2030, 1), 4), 
    AverageCost = rnorm(60), 
    Manufacturer = rep(c("Yoyodyne", "Widget", "Wonka", "Acme"), each = 15) 
) 

my_colors <- c("purple", "green", "blue", "red") 

bym %>% 
    mutate(Manufacturer = factor(Manufacturer, 
           levels = c("Yoyodyne", "Widget", "Wonka",  "Acme"))) %>% 
    ggplot(aes(x=Model.Year, y=AverageCost, colour=Manufacturer)) + 
    ggtitle("MyChart") + 
    labs(x="Year", y="Foo") + 
    geom_line(size=0.5) + 
    geom_point()+ 
    scale_x_continuous(breaks=c(min(bym$Model.Year),max(bym$Model.Year))) + 
    scale_color_manual(values = my_colors)