【问题标题】:Draw a diagonal line on specific boxes in ggplot2?在ggplot2中的特定框上画一条对角线?
【发布时间】:2017-03-22 05:27:34
【问题描述】:

您好,我正在尝试在属于 class2 的特定框上绘制对角线。 我懂了: Image1

我的数据集:


samples genes   value   class
sample1 geneA   0.52    class2
sample1 geneB   1       class1
sample1 geneC   1       class1
sample2 geneD   1       class1
sample2 geneB   1       class1
sample2 geneH   0.4     class2
sample2 geneC   1       class1
sample3 geneE   0.44    class2
sample3 geneF   0.34    class2
sample3 geneB   1       class1
sample3 geneI   0.65    class2
sample3 geneC   1       class1
sample4 geneB   0.72    class2
sample4 geneC   0.41    class2
sample5 geneG   1       class1
sample5 geneB   1       class1
sample5 geneC   1       class1

Class1 用黄线包围框标记。你能帮我弄清楚在属于 class2 的盒子上插入对角线吗?

我想要这样:

Image2

谢谢, 库马尔

【问题讨论】:

  • 欢迎来到 SO,库马尔。请将鼠标悬停在 R 标签上 - 它要求提供可重现的示例,通过该示例可以使用复制、粘贴、运行来重现您的问题。请参阅 this GIFthis guide。您可能希望在以后的帖子中使用它。

标签: r ggplot2


【解决方案1】:

这是一种方法:

p <- ggplot(df, aes(x=genes,y=samples,fill=class)) + geom_tile()
p + geom_segment(
  aes(x=xmin,xend=xmax,y=ymin,yend=ymax), 
  subset(ggplot_build(p)$data[[1]],fill=="#00BFC4"),
  inherit.aes=F
)

library(ggplot2)
df <- read.table(header=T, text="samples genes   value   class
sample1 geneA   0.52    class2
sample1 geneB   1       class1
sample1 geneC   1       class1
sample2 geneD   1       class1
sample2 geneB   1       class1
sample2 geneH   0.4     class2
sample2 geneC   1       class1
sample3 geneE   0.44    class2
sample3 geneF   0.34    class2
sample3 geneB   1       class1
sample3 geneI   0.65    class2
sample3 geneC   1       class1
sample4 geneB   0.72    class2
sample4 geneC   0.41    class2
sample5 geneG   1       class1
sample5 geneB   1       class1
sample5 geneC   1       class1")

【讨论】:

  • 您好,lukeA,感谢您的快速回答。您正在使用“填充=类”。但我想使用“fill = value”,在这种情况下,上面的代码不起作用。你能帮我弄清楚吗?谢谢!!
  • 也许是p &lt;- ggplot(df, aes(x=genes,y=samples,fill=value, group=class)) + geom_tile(); p + geom_segment( aes(x=xmin,xend=xmax,y=ymin,yend=ymax), subset(ggplot_build(p)$data[[1]],group==2), inherit.aes=F )。您应该编辑您的问题并关注评论。
  • 非常感谢,现在可以使用了。但是,如果您看到我的 image1,我使用自己的代码在框之间放置了一些间隙,当我将其与您的代码合并时,它显示错误。这是我的代码:ggplot()+geom_tile(data=data,aes(samples,genes,fill=value),width=0.9,height=0.9)+geom_tile(data=data1,aes(samples,genes),size=1,fill=NA,width=0.9,height=0.9,color="darkgoldenrod1") + scale_fill_gradient2(low="white", high="midnightblue", na.value="black", name="Cancer Cell Fraction") + coord_flip() + scale_x_discrete(name="") + scale_y_discrete(name="")
  • p &lt;- ggplot(df, aes(x=genes,y=samples,fill=value, group=class)) + geom_tile(data=df,aes(samples,genes,fill=value),width=0.9,height=0.9)+ geom_tile(data=df,aes(samples,genes),size=1,fill=NA,width=0.9,height=0.9,color="darkgoldenrod1") + scale_fill_gradient2(low="white", high="midnightblue", na.value="black", name="Cancer Cell Fraction") + coord_flip() + scale_x_discrete(name="") + scale_y_discrete(name=""); p + geom_segment( aes(x=xmin,xend=xmax,y=ymin,yend=ymax), subset(ggplot_build(p)$data[[1]],group==2), inherit.aes=F )
  • 感谢lukeA,这真是太棒了,非常感谢。我害怕在这里再问一件事。实际上,我还需要没有数据存在的组合框(例如 sample2-geneA;sample1-geneD 等),我需要将这些框着色为灰色,以区别于其他框。非常感谢!!
猜你喜欢
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多