这是我在这里的第一个问题,所以希望这有意义,并感谢您提前的时间!
我正在尝试生成散点图,其数据点是来自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))
当前散点图:
但是,我想将红线下方的绘图背景更改为较浅的红色,而蓝线上方的绘图背景更改为较浅的蓝色,但仍能够看到这些区域中的数据点。到目前为止,我已经在下面的代码中使用了多边形。
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))
新散点图:
但是,这些多边形将我的数据点隐藏在该区域中,我不知道如何保持多边形的颜色,但也看到了数据点。我还尝试在geom_polygon代码中添加“ fill = NA”,但这会使区域变为白色,并且仅保留彩色边框。另外,这些多边形会移动我的轴限制,因此如何更改轴以从-15开始到15结束而不是具有多余的多余长度?
任何帮助都会得到极大的赞赏,因为我已经为此奋斗了一段时间,并询问了无法帮助的朋友和同事。
谢谢,
Liv
您的问题有两个部分,所以我将使用一个虚拟数据集依次回答每个问题:
df <- data.frame(x=rnorm(20,5,1), y=rnorm(20,5,1))
Stefan对此答案发表了评论。这是一个例子。操作顺序在ggplot
中很重要。您创建的绘图是顺序执行的每个几何图形(绘图操作)的结果。在您的情况下,在geom_polygon
之后有geom_point
,因此这意味着它将绘制geom_point
的on top。要在多边形顶部绘制点,只需在geom_point
之后出现geom_polygon
。这是一个说明性示例:
p <- ggplot(df, aes(x,y)) + theme_bw()
p + geom_point() + xlim(0,10) + ylim(0,10)
现在,如果我们在后面添加geom_rect
,它将隐藏点:
p + geom_point() +
geom_rect(ymin=0, ymax=5, xmin=0, xmax=5, fill='lightblue') +
xlim(0,10) + ylim(0,10)
防止这种情况的方法是只颠倒geom_point
和geom_rect
的顺序。这种方式对所有geoms
都有效。
p + geom_rect(ymin=0, ymax=5, xmin=0, xmax=5, fill='lightblue') +
geom_point() +
xlim(0,10) + ylim(0,10)
问题的第二部分询问如何删除geom_polygon
的边缘和轴之间的空白。注意我如何一直使用xlim
和ylim
设置限制?这是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))