r - R:如何将颜色分配给特定值
问题描述
我有几个 10x10 矩阵,其中填充了五个值,即:0、0.5、1、1.5 和 2。并非所有矩阵都具有所有这些值。
我想制作图,相同的值总是具有相同的颜色。我有五种特定颜色要链接到特定值,即:
- 0:“白色
- 0.5:“浅蓝色”
- 1:“蓝色”
- 1.5:“lightpink1”
- 2:“红色”
目前,代码如下所示:
example_mat <- matrix(sample(c(0,0.5,1,1.5,2),100, replace = TRUE), nrow = 10, ncol = 10)
# make rotate function for plot
rotate <- function(x) t(apply(x, 2, rev))
# plot
image(rotate(example_mat), col=c("white","light blue","blue","lightpink1","red"), xaxt= "n", yaxt= "n")
grid(nx = 10, ny = 10, col = "black", lty = "solid")
box(which = "plot", lty = "solid")
这产生了以下情节:
这似乎运作良好,除了我有很多这些图,有时矩阵中并非所有 5 个值(0、0.5、1、1.5 和 2)都存在,然后他为这些值分配不同的颜色。如何使该图对于相同的值始终具有相同的颜色?
解决方案
一种方法是ggplot
根据每个图块的值使用和预定义填充颜色。
#Define colors using named vector
mycols = c(white = 0, lightblue = 0.5, blue = 1, pink = 1.5, red = 2)
#DATA
set.seed(42)
example_mat = matrix(sample(c(0,0.5,1,1.5,2),100, replace = TRUE), nrow = 10, ncol = 10)
rotate <- function(x) t(apply(x, 2, rev))
m1 = rotate(example_mat)
library(ggplot2)
#Convert to long format
d = data.frame(Values = as.vector(m1),
fillcol = names(mycols[match(m1, mycols)]),
X = as.vector(row(m1)),
Y = as.vector(col(m1)))
graphics.off()
ggplot(d, aes(x = X, y = Y)) +
geom_tile(color = "black", fill = d$fillcol) +
theme_light() +
coord_equal()
推荐阅读
- informix - 如何将初始块添加到 informix 数据库空间?
- python-2.7 - 获得独特的价值?
- angular2-forms - FormControl 或自定义指令
- javascript - 如何在没有 && 运算符的情况下使代码有效?
- python - 一个序列的真值是模棱两可的:使用
- c++ - 生成从 2 到 10,000 的数字。打印的数字只能是 2 个素数的倍数
- python - 使用管道对文本数据进行 SHAP KernelExplainer 错误
- javascript - 如果不使用,是否不创建闭包变量?
- lisp - 在 lisp 中将 ' 转换为引号
- c++ - 为什么在以下类似代码中一个给出运行时错误而另一个没有