R 分类变量的自定义彩色热图

R 分类变量的自定义彩色热图,r,ggplot2,R,Ggplot2,我已经搜索了很多关于这个问题的解决方案,只发现了这个类似的问题,其中描述了一个类似问题的解决方案,但似乎太复杂了 我想知道,对于类似的问题,是否还有其他更简单的解决方案 我有一个简单的数据框架: ,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,Incidenta

我已经搜索了很多关于这个问题的解决方案,只发现了这个类似的问题,其中描述了一个类似问题的解决方案,但似乎太复杂了

我想知道,对于类似的问题,是否还有其他更简单的解决方案

我有一个简单的数据框架:

,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))
但是,颜色是随机分布的,我想要的是为每一对颜色(影响,可能性)定制一种颜色。例如,这对瓷砖(几乎肯定,灾难性的)应涂成“红色”


我怎样才能做到这一点呢?

只需添加如下比例:

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

您可以创建另一列作为可能性和影响的组合,并使用命名向量作为
scale\u fill\u手册
比如说,

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"))

df此解决方案似乎是合理的,但当我有更多的组合时,我该怎么办?如果您希望控制影响和可能性的颜色,那么您仍然需要单独指定。为了节省键入不同组合的时间,您可以获得唯一组合的列表
com如果顺序改变怎么办?即使值在DataFrame中不存在,我如何包含颜色您可以设置键值对,请参见另一个答案。但是,您需要提前定义整个颜色字典并在其中执行查找。即使数据框中没有数据,我如何告诉ggplot2使用颜色填充其他分幅(从“缩放填充”手册中),例如,
scale\u fill\u手册
足够智能,可以仅使用存在的颜色,例如尝试添加
“任何其他”=“灰色”
一切正常。我尝试将所有其他组合添加到“填充比例”手册中,但我仍然只得到当前的组合。如果您想快速获得一些东西,RColorBrewer软件包中的“成对”调色板适用于多达12种颜色(即6对)。