2017-09-14 83 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