2017-09-14 81 views
1

我已經搜索了很多關於此問題的解決方案,並且只找到類似的問題,其中描述了類似問題的解決方案,但似乎太複雜。分類變量的自定義彩色熱圖

ggplot2 heatmaps: using different gradients for categories

我想知道是否有一個類似的問題的另一種簡單的解決方案。

我有一個簡單的數據幀:

,X,Likelihood,Impact 
1,A,Almost Certain,Catastrophic 
2,B,Likely,Major 
3,C,Possible,Moderate 
4,D,Likely,Minor 
5,E,Rare,Incidental 
6,F,Unlikely,Incidental 
7,G,Unlikely,Incidental 

從中我想建立一個熱圖。這是一個簡單的使用:

ggplot(df, aes(Impact, Likelihood)) + 
    geom_tile(aes(fill = X), colour = "white") + 
    geom_text(aes(label = X)) 

然而,顏色是隨機分佈的,我想有是每對(衝擊,似然)的自定義顏色。例如,對(幾乎某些,災難性的)瓷磚應該以「紅色」着色。

我該如何做到這一點?

+0

RColorBrewer軟件包中的「Paired」調色板適用於多達12種顏色(即6對),如果您想要快點。 –

回答

2

您可以創建另一列可能性和影響的組合,並命名爲載體用作顏色scale_fill_manual 例如,

df <- data.frame(X = LETTERS[1:3], 
       Likelihood = c("Almost Certain","Likely","Possible"), 
       Impact = c("Catastrophic", "Major","Moderate"), 
       stringsAsFactors = FALSE) 
df$color <- paste0(df$Likelihood,"-",df$Impact) 

ggplot(df, aes(Impact, Likelihood)) + geom_tile(aes(fill = color),colour = "white") + geom_text(aes(label=X)) + 
    scale_fill_manual(values = c("Almost Certain-Catastrophic" = "red","Likely-Major" = "yellow","Possible-Moderate" = "blue")) 
+0

該解決方案似乎是合理的,但當我有更多組合時該怎麼辦? – ifreak

+0

如果你想控制顏色的影響和可能性,那麼你仍然需要單獨指定它。爲了節省一些時間輸入不同的組合,你可以得到獨特組合列表'com < - unique(df $ color);'選擇相應大小的顏色顏色< - colorRampPalette(c(「red」 「綠色」))(長度(COM))'。並按照相應的順序(例如,從幾乎某些-Catastrophic到不太可能)匹配您的顏色代碼,然後在名稱中添加名稱(顏色)< - com'。並使用'... scale_fill_manual(values = colors)' – shaojl7

0

只需添加比例,像這樣:

+ scale_fill_manual(
    values = c("red", "green", "#cbf442", "magenta", "white", "#523a56", "yellow")) 

enter image description here

+0

如果訂單更改會怎樣?以及即使值不存在於數據框中,如何包含顏色 – ifreak

+0

您可以設置鍵值對,然後查看其他答案。但是,您需要提前定義整個顏色字典並在那裏執行查找。 – tonytonov

+0

即使數據框中沒有數據,我如何才能告訴ggplot2使用顏色填充其他圖塊(來自scale_fill_manual)? – ifreak