我有一个用plot_df
R 命名的数据框,其结构如下:
# Import the library
library(ggplot2)
# Create a sample data
set.seed(123)
plot_df <- data.frame(gene = rep(paste0("ENSG", 1:10, ".17"), each = 2),
mean = rnorm(20, 0.5, 0.1),
sd = rnorm(20, 0.02, 0.01),
group = rep(c("group_a", "group_b"), 10))
我正在尝试创建一个带有点和误差线的 ggplot,其中 y 轴代表基因名称(作为离散标签),x 轴代表平均值,颜色代表组(“group_a”或“组_b”)。这是我正在使用的代码:
ggplot(plot_df, aes(y=gene)) +
geom_point(aes(x=mean, color = group), position = position_dodge(width=0.9)) +
geom_errorbar(aes(xmin=mean-sd, xmax=mean+sd, color = group), width=.2,
position=position_dodge(.9)) +
geom_vline(aes(xintercept=0.5), linetype=2, color = 'gray') +
theme_bw() +
theme(panel.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
但是,我想根据 y 轴上的基因名称更改面板的背景颜色(每个基因具有不同的颜色或相邻基因没有相同的颜色)。由于我的 y 轴标签是离散的,我不确定如何实现这一点。任何帮助,将不胜感激。谢谢!
我努力了:
这是一个使用的解决方案
geom_tile()
,geom_tile()
我们将设置x
美观性以覆盖绘图的整个宽度并相应地调整每个图块的宽度。geom_tile()
用于x = sum(x_limits) / 2
将图块定位在地块的中心并width = diff(x_limits)
确保每个图块跨越地块的整个宽度另一种选择是
geom_rect
通过将离散gene
s 转换为数字并添加-/+.5
for来使用 aymin/ymax
。另外,通过设置xmin/max
允许-/+Inf
填充整个面板,我还将 y 比例的扩展减少到.5
。另请注意,我添加了作为scale_y_discrete
第一层以强制离散比例。