2013-02-18 53 views
4

我實現了以下函數來繪製ggplot使用的不同顏色。它們還可以繪製圖例中的十六進制顏色值。然而,不知何故,顏色和十六進制值的分配是錯誤的,我不明白爲什麼。在將十六進制顏色添加到數據幀data之後,我將它們排序,然後將其用於ggplot2函數。我認爲這樣可以解決問題,但事實並非如此。我還創建了包含十六進制的矢量col以及它其實我是想有作爲傳說中的RGB顏色值,但我也努力讓這個工作ggplot錯誤的顏色分配

ggplot_colors <- function(n, size=8, alpha=1) { 
    library(grDevices) 
    hues = seq(15, 375, length=n+1) 
    cols_hex <- sort(hcl(h=hues, l=65, c=100)[1:n]) 
    cols_rgb <- col2rgb(cols_hex) 
    cols_rgb <- apply(cols_rgb, 2, function(x){paste(x, collapse=",")}) 
    cols <- paste(cols_hex, cols_rgb, sep="; ") 
    data <- data.frame(x=1:length(cols), 
         y=1:length(cols), 
         cols_hex=cols_hex, 
         cols_rgb=cols_rgb, 
         cols=cols) 
    ggplot(NULL) + 
     geom_point(data=data, 
       aes(x=x, y=y, colour=cols_hex), size=size, alpha=alpha) 
} 

ggplot_colors(15, 8, 1) 

enter image description here

的紅色(248,118,109)的RGB值和F8766D的十六進制值分配給圖例中的00B0F6的十六進制值

回答

7

正如您想爲參數colour=提供顏色名稱並顯示此圖例參數,你應該添加scale_colour_identity()到你最後的李ne功能。這個比例確保提供的值將被解釋爲實際的顏色值。在函數scale()中添加參數breaks=cols_hex將確保圖例中的名稱排序。

ggplot(NULL) +  
geom_point(data=data, aes(x=x, y=y, colour=cols_hex), size=size, alpha=alpha) + 
     scale_colour_identity(guide="legend",breaks=cols_hex) 

enter image description here

+0

是的,這似乎工作。我從排序(hcl(h = hues,l = 65,c = 100)[1:n])中刪除了該排序,以便以「自然」方式顯示圖中的顏色。但是,在圖例中,顏色按字母順序排序。是否有可能匹配劇情和傳奇的順序? – user969113 2013-02-18 11:25:30

+1

更新了我的解決方案。這將工作,如果你沒有函數sort()在cols_hex <-... – 2013-02-18 11:42:04

+0

是的,完美的。這就是我試圖得到它的原因。非常感謝你! :) – user969113 2013-02-18 11:45:10