2012-12-12 89 views
10

我想重命名圖例中的值而不更改已設置的自定義顏色。有沒有一種方法來設置圖例標籤而不使用scale_color_manual?目前,我有這樣的事情:在不改變ggplot2中的顏色的情況下更改圖例名稱

norm <- rnorm(1000, 0 , .5) 
gam <- rgamma(1000, 2) 
beta <- rbeta(1000, 2, 3) 
dist <- data.frame(Normal = norm, Gamma = gam, Beta= beta) 
dat <- melt(dist, variable.name = "Distribution", value.name = "XValue") 
plot1 <- ggplot(dat, aes(XValue, color = Distribution)) + 
      stat_density(geom = "path", position = "identity", size = 2) + 
      scale_color_manual(values = c("yellow", "black", "forestgreen")) 

plot2 <- plot1 + scale_color_discrete(labels = c("Distribution 1", 
           "Distribution 2", 
          "Distribution 3")) 

但是,這會覆蓋手動顏色。我將在不同的功能中更改名稱,但不幸的是,我將無法使用scale_color_manual(values = ...,labels = ...)。我想到的另一個選擇是以某種方式獲取plot1中使用的顏色。然後我可以這樣做:

colors <- plot1$colors_used 
plot2 <- plot1 + scale_color_manual(labels = c("Distribution 1", 
               "Distribution 2", 
         "Distribution 3"), 
             values = colors) 

任何幫助將不勝感激。謝謝!

回答

8

可以在scale_colour_manual中指定標籤名稱。

ggplot(dat, aes(XValue, color = Distribution)) + 
    stat_density(geom = "path", position = "identity", size = 2) + 
    scale_color_manual(values = c("yellow", "black", "forestgreen"), 
        labels = c("Distribution 1", 
           "Distribution 2", 
           "Distribution 3")) 

enter image description here

+0

OP排除了這一點,其中,恕我直言,是真正的問題。他們用自己的其他代碼將自己繪製在一個角落裏。所以真正的解決方案是讓OP重構他們的代碼,以便這個解決方案能夠工作。 – joran

+0

謝謝你們,不幸的是,我寧願不重構。重命名標籤將在一個單獨的函數中完成。此功能將採取許多不同的情節,都有獨特的顏色。繪圖(以及顏色)將以許多不同的功能創建。我希望能夠應用此功能來確定新名稱,然後重命名。還有其他建議嗎?謝謝! – Taylor

1

接下來是不能保證在所有情況下工作的一個可怕的,可怕的念頭:

plot1$scales$scales[[1]]$labels <- c("Distribution 1","Distribution 2","Distribution 3") 

願上帝保佑你的靈魂吧。

沒有人想要重構他們的代碼。但是,當你已經達到了一個明顯的,簡單的問題解決方案突然不可能僅僅因爲你現有的代碼庫的複雜性,這是正確的行動方針。

另外,稍差進攻選擇:

levels(dat$Distribution) <- c("Distribution 1","Distribution 2","Distribution 3") 
plot1 %+% dat 
0

如果你願意使用一致的調色板,那麼你可以將此定義爲:

mycolors <- c("red", "blue", "black", #ee4747, #fff382, #f1f6c8, #334d65, #263825) 

現在,而不是

values = c("yellow", "black", "forestgreen") 

使用

values = mycolors 
相關問題