混合颜色以在R中制作自定义绘图

时间:2013-03-05 18:16:09

标签: r graphics ggplot2 heatmap

更新:删除了现在无关的前导码和更新的进度。

嗨我正在尝试将水平条略微变成热图,它会根据下面的值改变颜色。默认情况下,该栏应为红色,但会根据两个参数的值更改颜色。

我发现有些网页试图对SO产生类似的影响:R matrix plot with colour threshold and grid

How can one mix 2 or more color palettes to show a combined color value

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

我设法做的是生成我想要的颜色。我通过获得矩阵[2xn]来做到这一点,其中n是瓦片的数量。 row1包含每个图块的value1,第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"

因此,对于每个图块,值越高,混合中添加的绿色越多,值越高,添加的蓝色越多。因此,确定每个图块的颜色并将其添加为第三行。

我现在要做的是像这个页面中使用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))

我也尝试过尝试实现这一目标的图像()页面失败的尝试:

How can one mix 2 or more color palettes to show a combined color value

R matrix plot with colour threshold and grid

谢谢,

Ben W。

1 个答案:

答案 0 :(得分:0)

这样的事情(或者在给定窗口位置的总相似度被标准化的版本)? R - ggplot2, several questions, multiple correlated plots

编辑:这只是一个字符串(也就是说,你为A,B,C中的每一个创建一个字符串)。