首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ggplot geom_tile关联图混合排序轴记号标签创建奇怪的图

ggplot geom_tile关联图混合排序轴记号标签创建奇怪的图
EN

Stack Overflow用户
提问于 2020-09-09 23:06:59
回答 1查看 72关注 0票数 0

我在网上找不到任何答案,所以希望有人能提供解决方案。我正在尝试使用ggplot2的geom_tile来绘制具有一对染色体臂的共现/互斥图。下面是我的数据框架的一个片段。(此处链接至完整数据集:https://pastebin.com/imxfZNRX)

代码语言:javascript
运行
复制
       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轴刻度标签。

代码语言:javascript
运行
复制
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)

当我试图谋划的时候,

代码语言:javascript
运行
复制
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试图摆脱那个比较,所以它错开了比较,但它与排序混淆了……但我不知道如何修复它,所以我得到了一个三角形图)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-11 10:29:29

试试这个(注释中的解释):

代码语言:javascript
运行
复制
# 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"))

可重复性的小数据样本:

代码语言:javascript
运行
复制
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")

示例数据插图:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63814515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档