如何使用ggplot对散点图的背景进行着色,但仍在R中显示数据点?

问题描述 投票:1回答:1

这是我在这里的第一个问题,所以希望这有意义,并感谢您提前的时间!

我正在尝试生成散点图,其数据点是来自RNA-Seq数据集的2种处理的基因的log2表达值。使用此代码,我生成了以下图:

   ggplot(control, aes(x=log2_iFGFR1_uninduced, y=log2_iFGFR4_uninduced)) + 
       geom_point(shape = 21, color = "black", fill = "gray70") +
       ggtitle("Uninduced iFGFR1 vs Uninduced iFGFR4 ") +
       xlab("Uninduced iFGFR1") + 
       ylab("Uninduced iFGFR4") +
       scale_y_continuous(breaks = seq(-15,15,by = 1)) +
       scale_x_continuous(breaks = seq(-15,15,by = 1)) +
       geom_abline(intercept = 1, slope = 1, color="blue", size = 1) +
       geom_abline(intercept = 0, slope = 1, colour = "black", size = 1) +
       geom_abline(intercept = -1, slope = 1, colour = "red", size = 1) + 
       theme_classic() + 
       theme(plot.title = element_text(hjust=0.5))

当前散点图:

enter image description here

但是,我想将红线下方的绘图背景更改为较浅的红色,而蓝线上方的绘图背景更改为较浅的蓝色,但仍能够看到这些区域中的数据点。到目前为止,我已经在下面的代码中使用了多边形。

    pol1 <- data.frame(x = c(-14, 15, 15), y = c(-15, -15, 14))
    pol2 <- data.frame(x = c(-15, -15, 14), y = c(-14, 15, 15))

    ggplot(control, aes(x=log2_iFGFR1_uninduced, y=log2_iFGFR4_uninduced)) + 
       geom_point(shape = 21, color = "black", fill = "gray70") +
       ggtitle("Uninduced iFGFR1 vs Uninduced iFGFR4 ") +
       xlab("Uninduced iFGFR1") + 
       ylab("Uninduced iFGFR4") +
       scale_y_continuous(breaks = seq(-15,15,by = 1)) +
       scale_x_continuous(breaks = seq(-15,15,by = 1)) +
       geom_polygon(data = pol1, aes(x = x, y = y), color ="pink1") +
       geom_polygon(data = pol2, aes(x = x, y = y), color ="powderblue") +
       geom_abline(intercept = 1, slope = 1, color="blue", size = 1) +
       geom_abline(intercept = 0, slope = 1, colour = "black", size = 1) +
       geom_abline(intercept = -1, slope = 1, colour = "red", size = 1) + 
       theme_classic() + 
       theme(plot.title = element_text(hjust=0.5))

新散点图:

enter image description here

但是,这些多边形将我的数据点隐藏在该区域中,我不知道如何保持多边形的颜色,但也看到了数据点。我还尝试在geom_polygon代码中添加“ fill = NA”,但这会使区域变为白色,并且仅保留彩色边框。另外,这些多边形会移动我的轴限制,因此如何更改轴以从-15开始到15结束而不是具有多余的多余长度?

任何帮助都会得到极大的赞赏,因为我已经为此奋斗了一段时间,并询问了无法帮助的朋友和同事。

谢谢,

Liv

r ggplot2 polygon
1个回答
1
投票

您的问题有两个部分,所以我将使用一个虚拟数据集依次回答每个问题:

df <- data.frame(x=rnorm(20,5,1), y=rnorm(20,5,1))

从隐藏geom_point中停止geom_polygon

Stefan对此答案发表了评论。这是一个例子。操作顺序在ggplot中很重要。您创建的绘图是顺序执行的每个几何图形(绘图操作)的结果。在您的情况下,在geom_polygon之后有geom_point,因此这意味着它将绘制geom_pointon top。要在多边形顶部绘制点,只需在geom_point之后出现geom_polygon。这是一个说明性示例:

p <- ggplot(df, aes(x,y)) + theme_bw()
p + geom_point() + xlim(0,10) + ylim(0,10)

enter image description here

现在,如果我们在后面添加geom_rect,它将隐藏点:

p + geom_point() +
    geom_rect(ymin=0, ymax=5, xmin=0, xmax=5, fill='lightblue') +
    xlim(0,10) + ylim(0,10)

enter image description here

防止这种情况的方法是只颠倒geom_pointgeom_rect的顺序。这种方式对所有geoms都有效。

p + geom_rect(ymin=0, ymax=5, xmin=0, xmax=5, fill='lightblue') +
    geom_point() +
    xlim(0,10) + ylim(0,10)

enter image description here

删除轴和轴限制之间的空白

问题的第二部分询问如何删除geom_polygon的边缘和轴之间的空白。注意我如何一直使用xlimylim设置限制?这是scale_x_continuous(limits=...)scale_y_continuous(limits=...)的快捷方式;但是,我们可以在expand=函数中使用参数scale_...来设置在到达轴之前“扩展”绘图的距离。您可以分别为上下轴限制设置扩展设置,这就是为什么此参数需要一个由两个分量组成的矢量的原因,类似于limits=参数。

这里是删除空白的方法:

p + geom_rect(ymin=0, ymax=5, xmin=0, xmax=5, fill='lightblue') +
geom_point() +
scale_x_continuous(limits=c(0,10), expand=c(0,0)) +
scale_y_continuous(limits=c(0,10), expand=c(0,0))

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.