0

更新:现在删除了不相关的序言并更新了进度。

嗨,我正在尝试像热图一样犁一个水平条,它将根据以下值改变颜色。默认情况下,该条应为红色,但会根据两个参数的值更改颜色。

我发现了一些尝试对 SO 产生类似效果的页面:R matrix plot with color threshold and grid

一个人如何混合 2 个或多个调色板来显示组合的颜色值

所以我认为最好的方法是水平绘制一系列瓷砖,每个瓷砖都有一个基于两个值的计算颜色。

我设法做的是生成我想要的颜色。我通过获取一个矩阵 [2xn] 来做到这一点,其中 n 是瓷砖的数量。第 1 行包含每个图块的值 1,第 2 行包含每个图块的值 2:

 colourmatrix[,c(1:5)]
     [,1]      [,2]      [,3]      [,4]      [,5]     
     "81"      "82"      "82"      "82"      "82"     
     "58"      "58"      "58"      "58"      "58"

然后,我通过将以下内容应用于所有列来为每个图块生成颜色:

col.deter <- function(invalues) {
  cols <- rgb(green=invalues[1], red=100, blue=invalues[2], maxColorValue=100)
  return(cols)
}

cols <- unlist(lapply(1:ncol(colourmatrix), function(i) col.deter(colourmatrix[,i])))

然后我做了一个 rbind() 我的结果是:

 > colourmatrix[,c(1:5)]
     [,1]      [,2]      [,3]      [,4]      [,5]     
     "81"      "82"      "82"      "82"      "82"     
     "58"      "58"      "58"      "58"      "58"     
cols "#FFCF94" "#FFD194" "#FFD194" "#FFD194" "#FFD194"

所以对于每个图块,值 1 越高,添加到混合中的绿色越多,值 2 越高,添加到混合中的蓝色越多。因此,每个图块的颜色都被确定并添加为第三行。

我现在想要做的是类似于此页面中生成的网格,其中 ggplot2 在此代码的答案中:

dat <- expand.grid(blue=seq(0, 100, by=10), red=seq(0, 100, by=10))
dat <- within(dat, mix <- rgb(green=0, red=red, blue=blue, maxColorValue=100))

library(ggplot2)
ggplot(dat, aes(x=red, y=blue)) + 
  geom_tile(aes(fill=mix), color="white") + 
  scale_fill_identity()

但想象只有一行。我试图实现从左到右的一行瓷砖,它们的颜色由生成的值决定。

我试图用 ggplot2 和 image() 来做到这一点,但我的尝试失败了,而且我通常不使用 ggplot 2 我不理解 aes 和我得到的所有错误,但我试过了,因为那是过去的生成由上面的代码块生成的红色和蓝色瓦片图。

我失败的尝试:

ggplot(c(1,ncol(colourmatrix)), 1, aes(x=x, y=y)) + 
  geom_tile(aes(fill=colourmatrix[3,]), color="white") + 
  scale_fill_identity()

Error in ggplot.data.frame(fortify(data, ...), mapping) : 
  Mapping should be created with aes or aes_string


  qplot(c(1,ncol(colourmatrix)), c(1,ncol(colourmatrix)), fill=colourmatrix[3,], geom='tile')

Error: Aesthetics must either be length one, or the same length as the dataProblems:c(1, ncol(colourmatrix)), c(1, ncol(colourmatrix))

我也有一些失败的尝试尝试 image() 我读过的页面来尝试实现这一点:

一个人如何混合 2 个或多个调色板来显示组合的颜色值

具有颜色阈值和网格的 R 矩阵图

谢谢,

本·W。

4

1 回答 1

0

像这样的东西(或者在给定窗口位置的总相似度被标准化的版本)呢? R - ggplot2,几个问题,多个相关图

编辑:这将只用于一个字符串(也就是说,您将为 A、B、C 中的每一个制作一个)。

于 2013-03-05T19:03:20.893 回答