在ggplot2中定制“scale_color_gradient2”

5

我想在图片绘制中使用自己特定的颜色。我对ggplot2非常陌生,所以查看了它的手册这里(旧链接不存在,现在是这里),尝试重复其中一些内容;但是我无法弄清楚如何像绘图中那样提供我的色条。

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 的 unit 函数中出现错误,错误信息为:“x”和“units”的长度必须大于0。


2
只需将scale_color_gradient2()替换为scale_fill_gradient2(),因为您正在aes()内使用fill=。 - Didzis Elferts
谢谢,我该如何在 lattice 绘图中使用自己的 colorbar。 - Areza
我无法重现你的格子图颜色条,因为你没有提供变量myorig。 - Didzis Elferts
对不起,也许我应该称它为颜色条!我应该称其为我的颜色列表吗?还是? - Areza
@joran 是的,类似于我的图形绘制。 - Areza
显示剩余4条评论
2个回答

5
只是为了澄清 @Didzis 的答案,它可以工作但可能不能产生你所要的渐变效果... 'midpoint' 指的是希望出现在由 'mid' 指定的颜色的数值。因此,不要将 'midpoint' 参数设置为 256(这超出了你要着色的向量 value 的范围),最好将其设置为在你要着色的值的范围中间的某个值,否则你就没有使用你用 'low' 和 'high' 指定的整个渐变,这违背了 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


0

我认为你应该更改scale_fill_gradient2()low=mid=high=的值。对于low=,我使用了mycol的第一个值,对于high=,我使用了mycol的最后一个值,对于mid=,我使用了256(中间值)。同时将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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接