r - 在绘图之外添加组符号
问题描述
我正在尝试为 ggplot 之外的组添加符号,如下图所示。我尝试过使用 facet_grid,但是当它将图彼此分开时会出现问题,因此它不会与旁边的图对齐
生成绘图的代码:
df %>%
pivot_longer(cols=biomarkers) %>%
left_join(., gene_pct_df, by=c("name" = "biomarkers")) %>%
mutate(bio_factor = as.numeric(factor(biomarker_groups))) %>%
mutate(color_scheme = case_when(
value == "CC" & bio_factor == 1 ~ "a",
value == "CC" & bio_factor == 2 ~ "b",
value == "CC" & bio_factor == 3 ~ "c",
TRUE ~ "d")) %>%
ggplot(aes(y=reorder(name, bio_factor))) +
geom_raster(aes(x=factor(patient), fill=color_scheme,
alpha=color_scheme),
show.legend = F) +
geom_text(aes(x=factor(patient), label=value), size=3,
show.legend = F) +
scale_fill_manual(values = c("#F8766D", "#00BA38" ,"#619CFF", "white"),
labels = c("a", "b", "c", "d")) +
scale_alpha_manual(values = c(0.9, 0.9, 0.9, 0.01),
labels = c("a", "b", "c", "d")) +
theme(axis.title.x=element_blank(),
axis.ticks.y=element_blank(),
axis.title.y=element_blank(),
axis.text.x=element_blank(),
axis.ticks = element_blank(),
legend.title = element_blank(),
plot.margin = unit(c(1,1,1,1), "cm"))
测试功能的示例数据:
n_pat <- 15
patient <- 1:n_pat
treatment <- sample(c("Drug A", "Drug B"), n_pat, replace=TRUE)
change <- rnorm(n_pat, 0, 20)
biomarkers <- c("T790M","Ex19del","L959R","Ex20Ins","MET","ERBB2","EGFR",
"EGFR2","PIK3CA","KRAS","CDKN2","RB1","ALK","KIT","MET2",
"Other")
genes <- matrix(sample(x=c("CC", "AA", "AC"), replace=TRUE, size=n_pat * length(biomarkers)), nrow=n_pat, ncol=length(biomarkers))
biomarker_groups <- c(rep("Baseline", 4), rep("SCNA", 3), rep("SNV", 9))
df <- data.frame(patient, treatment, change, genes)
df <- data.frame(patient, treatment, change, genes)
colnames(df) <- c("patient", "treatment", "change", biomarkers)
genes_df <- df %>%
select(biomarkers)
pcts <- colSums(genes_df == "CC") / length(df)
gene_pct_df <- data.frame(pcts, biomarker_groups, biomarkers)
解决方案
您可以同时为和指定facet_wrap
with ,然后在 中调整面板间距:free_y
scale
space
theme()
df %>%
pivot_longer(cols=biomarkers) %>%
left_join(., gene_pct_df, by=c("name" = "biomarkers")) %>%
mutate(bio_factor = as.numeric(factor(biomarker_groups))) %>%
mutate(color_scheme = case_when(
value == "CC" & bio_factor == 1 ~ "a",
value == "CC" & bio_factor == 2 ~ "b",
value == "CC" & bio_factor == 3 ~ "c",
TRUE ~ "d")) %>%
ggplot(aes(y=reorder(name, bio_factor))) +
geom_raster(aes(x=factor(patient), fill=color_scheme,
alpha=color_scheme),
show.legend = F) +
geom_text(aes(x=factor(patient), label=value), size=3,
show.legend = F) +
scale_fill_manual(values = c("#F8766D", "#00BA38" ,"#619CFF", "white"),
labels = c("a", "b", "c", "d")) +
scale_alpha_manual(values = c(0.9, 0.9, 0.9, 0.01),
labels = c("a", "b", "c", "d")) +
facet_grid(biomarker_groups ~.,
switch="y",scales="free_y",space = "free_y") +
theme(axis.title.x=element_blank(),
axis.ticks.y=element_blank(),
axis.title.y=element_blank(),
axis.text.x=element_blank(),
axis.ticks = element_blank(),
legend.title = element_blank(),
panel.spacing.y=unit(0,"lines"),
strip.placement = "outside",
plot.margin = unit(c(1,1,1,1), "cm"))
推荐阅读
- c# - 实体框架核心 - 异步/同步 - DbContext
- python - tensorflow.python.framework.errors_impl.InvalidArgumentError: Expected size[0] in [0, 512], but got 891 [Op:Slice]
- powershell - powershell bq 查询扭曲了 SQL 语句(在 > 符号之后删除一个部分)
- node.js - Node.JS Express API - 包括请求承诺链的承诺链 - ERR_INVALID_HTTP_TOKEN
- arm - This simple ARM Cortex-M SysTick based task scheduler wont work. Should I manage preemption myself?
- angular - Angular:如何强制 EventEmitter 在测试中刷新
- java - 继续询问,直到使用 2D 数组给出正确的值
- ruby-on-rails - 在 Heroku 上运行 git shell 命令
- xml - 如何通过 PowerShell 从 xml 中获取组合值?
- machine-learning - 随机森林 - 最大特征