在ggplot2中自定义“scale_color_gradient2”

时间:2013-07-25 16:58:14

标签: r ggplot2

我想在我的图片情节中使用我自己的特定颜色。我是ggplot2中的新手,所以从here查看了它的手册并尝试重复一些内容;但我无法弄清楚如何提供我的色条,就像我对图形图一样。

library(reshape2)
library(ggplot2)

#my specific color list
mycol <- vector(length=512, mode = "numeric")
for (k in 1:256) mycol[k] <- rgb(255, k - 1, k - 1, maxColorValue=255)
for (k in 257:512) mycol[k] <- rgb(511 - (k - 1), 511 - (k - 1), 255, maxColorValue=255)
mycol <- rev(mycol)
ncolors <- length(mycol)

# graphics plot
par(mar = c(5, 13, 1, 6))
image(1:ncol(volcano), 1:nrow(volcano), t(volcano), zlim = c(0, ncolors), col=mycol, axes=FALSE, main="W Matrix", sub = "", xlab= "Components", ylab="Genes")
axis(2, at=1:nrow(volcano), labels=row.names(volcano), adj= 0.5, tick=FALSE, las = 1, cex.axis=0.25, font.axis=1, line=-1)
axis(1, at=1:ncol(volcano), labels=colnames(volcano), adj= 0.5, tick=FALSE,las = 3, cex=1, cex.axis=0.5, font.axis=1, line=-1)


# ggplot2
library(reshape2)
library(ggplot2)
library(ez)
ggplot(melt(volcano), aes(x=Var1, y=Var2, fill=value)) + geom_tile() + scale_color_gradient2(low = muted("red"), mid = "white", high = muted("blue"), midpoint = 0, space = "rgb", guide = "colourbar") # the code does not really use my color bar

*单位出错(tic_pos.c,&#34; mm&#34;):&#39; x&#39;和&#39;单位&#39;必须有长度&gt; 0 *

2 个答案:

答案 0 :(得分:3)

只是为了澄清@Didzis的答案,它有效,但可能无法产生您正在寻找的渐变......

'midpoint'是指您希望“mid”指定的颜色出现的数值。所以,不要将'midpoint'参数设置为256(超出value范围,这是你要着色的矢量),而是将它设置为某个位于中间位置的值是明智的。您要着色的值的范围,否则您没有使用您使用“低”和“高”指定的整个渐变,这违背了scale_color_gradient2的目的。确切的值取决于您尝试在视觉上进行通信的内容,但通常使用均值或中位数。在这里,我编辑了@Didzis的代码,其中'midpoint'设置为value的中位数

v <- melt(volcano)
ggplot(v, aes(x=Var1, y=Var2, fill=value)) + 
  geom_tile() + 
  scale_fill_gradient2(low = "#0000FF", mid = "#FFFFFF", high ="#FF0000", 
                       midpoint = median(v$value), space = "rgb", guide = "colourbar")

这给出了一个具有更宽梯度的图:

enter image description here

答案 1 :(得分:0)

我认为您应该更改low=mid=high=scale_fill_gradient2()值的值。对于low=,我使用mycol的第一个值,high=的最后一个值为mycol,而mid=使用的是256. value(middle)。同时将midpoint=更改为256,因为这是您的颜色数量的中点。

ggplot(melt(volcano), aes(x=Var1, y=Var2, fill=value)) + 
  geom_tile() + 
  scale_fill_gradient2(low = "#0000FF", mid = "#FFFFFF", high ="#FF0000", 
                       midpoint = 256.5, space = "rgb", guide = "colourbar")

enter image description here