目前我尝试制作多个可视化,其中矩阵中的数字必须在图像中获得某种(固定)颜色。
由于我无法找到真正为固定数字指定颜色的方法,这导致我比我想象的更麻烦。
问题显示在以下示例中:
假设我们定义以下颜色与以下数字相关联
cols <- c(
'0' = "#FFFFFF",
'1' = "#99FF66",
'2' = "#66FF33",
'3' = "#33CC00",
'4' = "#009900"
)
image(as.matrix(d), col=cols)
现在,如果我们想象下面的矩阵似乎都很好
d<-read.table(text="
0 1 0 3
3 2 1 4
4 1 0 2
3 3 0 1")
image(as.matrix(d), col=cols)
然而,如果可视化以下矩阵,则问题变得清晰
d<-read.table(text="
1 1 1 3
3 2 1 4
4 1 2 2
3 3 2 1")
image(as.matrix(d), col=cols)
我们应该跳过白色(“#FFFFFF”),因为数字0不存在。然而,无论如何R选择使用白色(“#FFFFFF”)并将其与数字1相关联,而不是“#009900”。
为了保持可视化的一致性,所有图像的颜色与相同的数字保持关联是非常重要的,那么我该如何实现呢?
答案 0 :(得分:3)
删除矩阵中不重要的颜色值:
image(as.matrix(d), col=cols[names(cols)%in%unlist(d)])
正如名称所示, unlist
仅适用于列表。
如果d
已经是矩阵,只需使用c(d)
答案 1 :(得分:0)
感谢Andre的建议,我可以用一种相当简洁的方式解决它
d<-as.matrix(read.table(text="
1 1 1 3
3 2 1 4
4 1 1 2
3 3 1 1"))
cols <- c(
'0' = "#FFFFFF",
'1' = "#99FF66",
'2' = "#66FF33",
'3' = "#33CC00",
'4' = "#009900"
)
image(as.matrix(d), col= cols[ names(cols) %in% d ])