是否可以避免ggrepel重叠轴标签?

彭Y

我正在用ggplot2绘制热图。y轴上的几个刻度需要标记。但是,其中一些过于紧密和重叠。我知道ggrepel可以分隔文本标签,但是目前我还没有解决我的问题。

我的代码如下。任何建议都欢迎。谢谢。

码:

df <- data.frame()

for (i in 1:50){
  tmp_df <- data.frame(cell=paste0("cell", i), 
                       gene=paste0("gene", 1:100), exp = rnorm(100), ident = i %% 5)
  df<-rbind(df, tmp_df)
}

labelRow=rep("", 100)
for (i in c(2, 5, 7, 11, 19, 23)){
  labelRow[i] <- paste0("gene", i)
}

library(ggplot2)
heatmap <- ggplot(data = df, mapping = aes(x = cell, y = gene, fill = exp)) +
  geom_tile() + 
  scale_fill_gradient2(name = "Expression") + 
  scale_y_discrete(position = "right", labels = labelRow) +
  facet_grid(facets = ~ident,
             drop = TRUE,
             space = "free",
             scales = "free", switch = "x") +
  scale_x_discrete(expand = c(0, 0), drop = TRUE) +
  theme(axis.line = element_blank(),
        axis.ticks = element_blank(),
        axis.title.y = element_blank(),
        axis.text.y = element_text(),
        axis.title.x = element_blank(),
        axis.text.x = element_blank(),
        strip.text.x = element_text(angle = -90))

heatmap

在此处输入图片说明

克劳斯·威尔克

对于这些类型的问题,我更喜欢将轴绘制为单独的图,然后合并。这需要一些摆弄,但是可以让您绘制几乎任何想要的轴。

在我的解决方案,我使用的功能get_legend()align_plots()以及plot_grid()从cowplot包。免责声明:我是程序包的作者。

library(ggplot2)
library(cowplot); theme_set(theme_gray()) # undo cowplot theme setting
library(ggrepel)

df<-data.frame()
for (i in 1:50){
  tmp_df <- data.frame(cell=paste0("cell", i), 
                       gene=paste0("gene", 1:100), exp=rnorm(100), ident=i%%5)
  df<-rbind(df, tmp_df)
}


labelRow <- rep("", 100)
genes <- c(2, 5, 7, 11, 19, 23)
labelRow[genes] <- paste0("gene ", genes)

# make the heatmap plot
heatmap <- ggplot(data = df, mapping = aes(x = cell,y = gene, fill = exp)) +
  geom_tile() + 
  scale_fill_gradient2(name = "Expression") + 
  scale_x_discrete(expand = c(0, 0), drop = TRUE) + 
  facet_grid(facets = ~ident,
             drop = TRUE,
             space = "free",
             scales = "free", switch = "x") + 
  theme(axis.line = element_blank(),
        axis.title = element_blank(),
        axis.text = element_blank(),
        axis.ticks = element_blank(),
        strip.text.x = element_text(angle = -90),
        legend.justification = "left",
        plot.margin = margin(5.5, 0, 5.5, 5.5, "pt"))

# make the axis plot
axis <- ggplot(data.frame(y = 1:100,
                          gene = labelRow),
               aes(x = 0, y = y, label = gene)) +
  geom_text_repel(min.segment.length = grid::unit(0, "pt"),
                 color = "grey30",  ## ggplot2 theme_grey() axis text
                 size = 0.8*11/.pt  ## ggplot2 theme_grey() axis text
                 ) +
  scale_x_continuous(limits = c(0, 1), expand = c(0, 0),
                     breaks = NULL, labels = NULL, name = NULL) +
  scale_y_continuous(limits = c(0.5, 100.5), expand = c(0, 0),
                     breaks = NULL, labels = NULL, name = NULL) +
  theme(panel.background = element_blank(),
        plot.margin = margin(0, 0, 0, 0, "pt"))

# align and combine
aligned <- align_plots(heatmap + theme(legend.position = "none"), axis, align = "h", axis = "tb")
aligned <- append(aligned, list(get_legend(heatmap)))
plot_grid(plotlist = aligned, nrow = 1, rel_widths = c(5, .5, .7))

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在此示例中是否可以避免使用类型检查?

是否可以避免在HQL查询的“ where”子句中为布尔函数添加“ = true”

是否可以避免使用libgdx的适配器类?

在高图中,是否可以获取x轴标签的确切位置以进行重叠检测?

对于CUDA,是否可以确保三元运算符可以避免分支分歧?

是否可以避免传递可选参数的默认值?

减少OpenMP是否可以避免错误共享?

折线图上的程序标签可以避免ggplot2线

先来先服务(FCFS)调度是否可以避免死锁?

如何在散景上创建动态标签集,以避免文本重叠?

是否可以避免IndexOptionsConflict更改MongoDB索引中的expiredAfterSeconds?

使用异步等待是否可以避免线程耗尽?

可以将Angular routerLink添加到HTML <a>标签中以避免SEO问题吗?

如何增加标签间距以避免在networkx图形中标签重叠

Laravel:通过使用“ With”,是否可以避免对数据库的多次查询/连接?

以简单的方式覆盖离散的x轴标签,以避免标签和数据不匹配

在Apache Airflow 2.0中是否可以避免此警告?

是否可以避免保留对听众的引用?

使用Canvas时是否可以避免“操作不安全”?

rCharts轴标签与刻度线标签重叠

添加滚动以避免重叠

是否可以避免打开文件?

是否可以避免名称在命令行中重复?

在网格中排列分面图 - 如何完全删除分面标签以避免重叠

传递整个对象时是否可以避免重新渲染所有输入?

是否可以缩短javascript以避免if和else?

是否可以使用共享的 x 轴创建重叠的 y 轴?

是否可以避免使用 `mod.rs` 文件?

如何有条件地渲染标签以避免标签在图表中重叠?