r - 从 ggplot2 geom_raster() 生成分色矩形

标签 r ggplot2

我一直在尝试使用 ggplots/reshape2 和这样的代码生成二维矩形图:

library(reshape2)
library(ggplot2)
m <- matrix( c('SNV', 'SNV', NA, NA, 'INDEL', 'SNV', 'INDEL', 'SNV', 'SNV/INDEL'), 3, 3 )
ggplot(melt(m), aes(Var1,Var2, fill=value)) + geom_raster() + xlab('Patient') + ylab('Gene')

请注意,对于具有 SNV/INDEL 的磁贴,它如何将其着色为蓝色作为单独的类别,因为它应该如此。我只是想知道是否有办法让它实际上有一个分色瓷砖,这样瓷砖颜色是栗色/绿色(比如瓷砖的一半是栗色,另一半是绿色)?

谢谢,

最佳答案

这比我想要的要手动一些,但它可以概括为一个单元格中的两个以上值。这也使用 data.table ,仅仅因为它使在熔化的数据框中以“X/Y/Z”格式转换值变得非常容易:

library(data.table)
dt <- data.table(melt(m))
dt <- dt[, strsplit(as.character(value), "/"), by=list(Var1, Var2)]  # this expands "X/Y/Z" into three rows
dt[, shift:=(1:(.N))/.N - 1/(2 * .N) - 1/2, by=list(Var1, Var2)]
dt[, height:=1/.N, by=list(Var1, Var2)]
ggplot(dt, aes(Var1,y=Var2 + shift, fill=V1, height=height)) + 
  geom_tile(color="yellow", size=1) + xlab('Patient') + ylab('Gene')

enter image description here

请注意,我通过添加一个包含三个值的框使您的数据集变得更有趣(而且这是与 geom_tile 一起使用的,而不是栅格,希望它不会破坏交易)。
m <- structure(c("SNV", "SNV", NA, NA, "INDEL/POS/NEG", "SNV", "INDEL", 
            "SNV", "SNV/INDEL"), .Dim = c(3L, 3L))

关于r - 从 ggplot2 geom_raster() 生成分色矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22107666/

相关文章:

R如何在ggplot2中为金字塔状图添加分面标签

r - 在 ggplot2 中创建自定义绘图

r - 更改火山图上的平滑度

r - 如何给grep()输出添加一个属性

r - 如何引用稍后通过 bookdown 显示的绘图?

r - 在 R Markdown 模板中包含图像,无需为模板创建新目录

r - 时间序列插值: monthly data to certain day frequency data

r - 如何将另一个数据集的折线图添加到已使用分面网格的现有折线图?

r - 带有躲避组的条形图中每个条形和每个组的轴标签

r - 获取组内的 (t-1) 数据