首页 > 解决方案 > R:如何将颜色分配给特定值

问题描述

我有几个 10x10 矩阵,其中填充了五个值,即:0、0.5、1、1.5 和 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)都存在,然后他为这些值分配不同的颜色。如何使该图对于相同的值始终具有相同的颜色?

标签: rcolors

解决方案


一种方法是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()

在此处输入图像描述


推荐阅读