我在网上找不到任何答案,所以希望有人能提供解决方案。我正在尝试使用ggplot2的geom_tile
来绘制具有一对染色体臂的共现/互斥图。下面是我的数据框架的一个片段。(此处链接至完整数据集:https://pastebin.com/imxfZNRX)
Event1 Event2 label
1017 16p gain 16p loss exclusion
666 13q gain 13q loss exclusion
1523 19p gain 19q gain co-occur
1565 19p gain 9q gain co-occur
1738 1p loss 1q loss co-occur
染色体臂的名称是数字和字母的混合。因此,我使用gtools中的mixedsort()
对它们进行排序。并分解了我的y/x轴刻度标签。
library(gtools)
library(dplyr)
event1 <- mixedsort(unique(cooccur.table$Event1 %>% as.vector()), decreasing = F); event1
event2 <- mixedsort(unique(cooccur.table$Event2 %>% as.vector()), decreasing = T); event2
cooccur.table$Event1 <- factor(cooccur.table$Event1, levels = event1)
cooccur.table$Event2 <- factor(cooccur.table$Event2, levels = event2)
当我试图谋划的时候,
library(ggplot2)
ggplot(cooccur.table, aes(x = Event1, y = Event2, fill = label, label = label)) +
geom_tile(colour="black") +
coord_equal() +
scale_fill_manual(values = c("#08d9d6", "#e84a5f", "#ffffff")) +
# scale_y_discrete(limits = rev(levels(cooccur.table$Event1)[2:72])) +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1.4),
axis.text.y = element_text(hjust = 1.5),
legend.position = "right",
axis.line.x = element_line(size = 0.2),
axis.line.y = element_line(size = 0.2),
axis.ticks = element_blank())
这就是结果。
(我在想,由于它是成对比较,geom_tile
试图摆脱那个比较,所以它错开了比较,但它与排序混淆了……但我不知道如何修复它,所以我得到了一个三角形图)
发布于 2020-09-11 10:29:29
试试这个(注释中的解释):
# create ONE set of factor levels that cover both columns
event.levels <- mixedsort(unique(c(cooccur.table$Event1, cooccur.table$Event2)))
# create combined table such that we have both Event1-Event2 and Event2-Event1 pairs
new.cooccur.table <- rbind(cooccur.table,
cooccur.table %>%
rename(Event2 = Event1, Event1 = Event2) %>%
select(Event1, Event2, label)) %>%
# convert both event columns to factor, with the same set of factor levels defined above
mutate(across(starts_with("Event"),
~factor(.x, levels = event.levels))) %>%
# keep only rows where Event1's is smaller than Event2 (this creates the triangle)
filter(as.integer(Event1) < as.integer(Event2)) %>%
# reverse the factor level order for Event2
mutate(Event2 = forcats::fct_rev(Event2))
# plot
ggplot(new.cooccur.table,
aes(x = Event1, y = Event2, fill = label, label = label)) +
geom_tile(colour="black") +
coord_equal() +
scale_fill_manual(values = c("#08d9d6", "#e84a5f", "#ffffff"))
可重复性的小数据样本:
cooccur.table <- structure(list(Event1 = c("9p gain", "19q gain", "19p gain",
"9q gain", "10q gain", "19p gain", "19p gain", "9p gain", "19p gain",
"19q gain", "10q gain", "10q gain", "9p loss", "19p loss", "10q loss",
"19q loss", "19p loss", "19p gain", "10q loss", "10q loss", "10q loss",
"19q gain", "9p loss", "19p loss", "19q loss", "19p gain", "10q gain",
"10q gain", "19p loss", "19q gain", "10q gain", "19p loss", "10q loss",
"10q loss", "19q loss", "19q loss", "10q gain", "19p gain", "10q gain",
"19p loss", "10q gain", "19q gain", "10q loss", "10q loss", "9p gain"
), Event2 = c("9p loss", "19q loss", "19p loss", "9q loss", "10q loss",
"19q gain", "9q gain", "9q gain", "19q loss", "9q gain", "19p gain",
"9q gain", "9q loss", "19q loss", "9q loss", "9q loss", "9q loss",
"9q loss", "9p loss", "19p loss", "19q loss", "9p gain", "9q gain",
"9p loss", "9p loss", "9p loss", "9p gain", "19q gain", "9q gain",
"9p loss", "19q loss", "9p gain", "19q gain", "9p gain", "9q gain",
"9p gain", "9q loss", "9p gain", "9p loss", "19q gain", "19p loss",
"9q loss", "9q gain", "19p gain", "9q loss"), label = c("exclusion",
"exclusion", "exclusion", "exclusion", "exclusion", "co-occur",
"co-occur", "co-occur", "exclusion", "co-occur", "co-occur",
"co-occur", "co-occur", "co-occur", "neutral", "neutral", "neutral",
"neutral", "neutral", "neutral", "neutral", "neutral", "neutral",
"neutral", "neutral", "neutral", "neutral", "neutral", "neutral",
"neutral", "neutral", "neutral", "neutral", "neutral", "neutral",
"neutral", "neutral", "neutral", "neutral", "neutral", "neutral",
"neutral", "neutral", "neutral", "neutral")), row.names = c(NA,
-45L), class = "data.frame")
示例数据插图:
https://stackoverflow.com/questions/63814515
复制相似问题