【问题标题】:Seurat, interfering with ggplot2/plotly outputSeurat,干扰 ggplot2/plotly 输出
【发布时间】:2017-12-31 21:03:05
【问题描述】:

我正在 Rstudio 中编写一个 R 脚本,查看单个单元格数据并生成各种图表。我使用的包是ggplot2。当 Seurat 库未加载时,它会生成像这样的漂亮图形输出:

然后当 Seurat 库被导入时,图形恢复到这个丑陋: 以下是 Seurat 引入的导入列表:

Imports: methods, ROCR, stringr, mixtools, lars, fastICA, tsne, Rtsne,
        fpc, ape, VGAM, pbapply, igraph, FNN, caret, plyr, dplyr,
        RColorBrewer, MASS, Matrix, irlba, reshape2, gridExtra, gplots,
        gdata, Rcpp, RcppEigen, RcppProgress, tclust, ranger

关于如何在不改变图形输出的情况下同时存在这两个库有什么想法吗?

尝试的解决方案:

  • 试过“detach(”package:Seurat", unload = TRUE)” //在关闭和重新加载 RStudio 时没有恢复绘图并且不允许上游代码块提供 ggplot2 正常图形。

【问题讨论】:

  • 看起来 Seurat 必须更改默认主题设置。试试你的情节代码+ theme_gray(),看看它是否会恢复到Seurat之前的设置。
  • 似乎有效,非常感谢! @布莱恩
  • @Brian 请作为答案发布。
  • @zx8754 我做到了,希望这是一个比我的简短评论更有趣的答案。

标签: r ggplot2 package seurat


【解决方案1】:

评论要求我发布我的修复作为答案,所以我做了一点挖掘。当您调用library(package) 后发生意外行为时,那是因为该包有一个名为.onLoad.onAttach 的函数。这些会在加载或附加包时自动运行,通常用于设置选项、打印有用的消息等。最佳实践表明您应该使用补码函数撤消任何操作,.onUnload。见:https://r-pkgs.org/r.html#when-you-do-need-side-effects

有时,软件包确实需要副作用。这是最常见的,如果 你的包与外部系统对话——你可能需要做一些 包加载时的初始设置。 ...如果您使用 .onLoad(), 考虑使用 .onUnload() 清除任何副作用。经过 按照惯例,.onLoad() 和朋友通常保存在一个名为 zzz.R.

所以我在 Github 存储库中查找包 Seurat,但没有看到任何与 ggplot2 相关的选项 (https://github.com/satijalab/seurat/blob/master/R/zzz.R)。接下来是检查该包的DESCRIPTION,它向我显示了Seurat 使用的已加载包。这是一个很长的列表,但我认出了那里有一个比较常见的自定义图形包,cowplot。如果你然后去那个 repo (https://github.com/wilkelab/cowplot/blob/master/R/setup.R):

.onAttach <- function(libname, pkgname) {
  # switch the default theme to theme_cowplot
  # ggplot2::theme_set(theme_cowplot())
  packageStartupMessage("\n********************************************************")
  packageStartupMessage("Note: As of version 1.0.0, cowplot does not change the")
  packageStartupMessage("  default ggplot2 theme anymore. To recover the previous")
  packageStartupMessage("  behavior, execute:\n  theme_set(theme_cowplot())")
  packageStartupMessage("********************************************************\n")
}

从这些消息中,您可以看到过去加载cowplot 更改了ggplot2 的默认主题。出于好奇,我查看了提交以了解此更改何时发生在源头(尽管不是在将其推送到 CRAN 时):

https://github.com/wilkelab/cowplot/commit/158ccdfa45d6c3e99c8568afaa73f7d68cd6c9c2#diff-c9a33000e506e95bca8089aa91efd8b2

clauswilke 于 2018 年 3 月 29 日承诺

因此,截至大约一年前,这个问题不再可重现。但是,当发生意外行为时,这种搜寻过程可能对未来的读者仍然有用。


TL;DR:

ggplot2-特定修复:原始默认主题是 theme_gray(),因此如果您无法隔离影响代码的包,您始终可以手动将其添加到受影响的图中以恢复到以前的行为。

【讨论】:

    猜你喜欢
    • 2017-10-27
    • 2016-02-05
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多