如何解决在 R 中重现此图
类似这个情节
我有这样的数据
> dput(df)
structure(list(gene = c("18q","4q","21p","21q","5q","22q","17p","3p","9p","4p","9q","19q","10q","15q","16p","19p","1p","18p","16q","8p","18q","14q","20q"),CNV = c("Deletion","Deletion","Amplification"),log10_pvalue = c(5.974694135,5.73754891,4.995678626,4.970616222,4.793174124,4.109020403,3.524328812,2.823908741,2.567030709,2.186419011,1.769551079,1.59345982,1.416801226,1.195860568,1.094743951,1.087777943,4.083019953,3.826813732,2.675717545,2.342944147,2.084072788,1.850780887,1.659555885,1.197226275,1.88941029),Percentage_altered = c(0.61,0.53,0.61,0.56,0.44,0.5,0.47,0.39,0.28,0.33,0.31,0.22,0.36,0.63,0.52,0.59,0.67,0.26,0.48,0.3,0.5
),group = c("Non-responders","Non-responders","Responders","Responders"
)),class = "data.frame",row.names = c(NA,-34L))
>
我已经尝试过这个代码,但没有给我你产生的结果
df %>%
mutate(net_frequency=ifelse(CNV == "Deletion",-Percentage_altered/100,Percentage_altered/100)) %>%
crossing(.,tibble(grp = c("Responders","Non-Responders"))) %>%
mutate(log10_pvalue = if_else(CNV == "Deletion",-log10_pvalue,log10_pvalue)) %>%
ggplot(aes(x = log10_pvalue,y = net_frequency,color = log10_pvalue)) +
geom_point(aes(size=Percentage_altered)) +
geom_text_repel(aes(label=ifelse(log10_pvalue > -log10(0.05),gene,"")),force=10) +
geom_hline(yintercept=0,lty=2) +
scale_color_distiller(type = "div") +
theme_classic() +
facet_wrap(~grp)
我得到了这样的情节但没有意义
如果您看一下,对于这两个组,仅绘制了响应者的信息
你能帮忙编辑代码吗
解决方法
正如@andrew_reece 所建议的那样,facet_*
会在这里提供帮助。
由于我们在数据中没有任何“响应者”的概念,我将使用 tidyr::crossing
盲目复制数据。
此外,为了演示,我删除了 theme_classic
以突出显示窗格。 (使用没有问题,我只是想说清楚区别。)
library(dplyr)
library(ggplot2)
library(ggrepel) # geom_text_repel
library(tidyr) # crossing
df %>%
mutate(net_frequency=ifelse(CNV == "Deletion",-Percentage_altered/100,Percentage_altered/100)) %>%
crossing(. tibble(resp = c("Responder","Non-Responder"))) %>%
ggplot(. aes(x=log10_pvalue,y=net_frequency)) +
geom_point(aes(size=Percentage_altered,color=log10_pvalue)) +
geom_text_repel(aes(label=ifelse(log10_pvalue > -log10(0.05),gene,"")),force=10) +
geom_hline(yintercept=0,lty=2) +
facet_wrap(. ~ resp)
至于“两组不同颜色”,你需要什么并不是很清楚。如果您希望(例如)响应者的色标为“蓝色”,非响应者的色标为“红色”,请查看 ggplot 扩展包,例如 ggnewscale
或 ggrelayer
。 (它们不是烘焙的。)
更新包括 OP 的更新数据,现在有两个组。
编辑 2 根据评论删除 OP 的原始 geom_repel
过滤器。
这是一种通过将 CNV == 'Deletion'
的所有 log10_pvalue
值设为负数来创建发散色标的方法。与 facet_wrap()
搭配使用,即可实现您的目标。
df %>%
mutate(net_frequency=ifelse(CNV == "Deletion",Percentage_altered/100),log10_pvalue = if_else(CNV == "Deletion",-log10_pvalue,log10_pvalue)) %>%
ggplot(aes(x = log10_pvalue,y = net_frequency,color = log10_pvalue)) +
geom_point(aes(size=Percentage_altered)) +
geom_text_repel(aes(label=gene),lty=2) +
scale_color_distiller(type = "div") +
theme_classic() +
facet_wrap(~group)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。