如何避免 textplot::plot.BTM() 的聚类可视化具有极厚的边缘和低对比度的色调?

How to avoid cluster visualizations of textplot::plot.BTM() that have extremely thick edges with low contrast color shades?

目标和工具

我目前正在尝试熟悉 RBTM and textplot,即如何创建双项主题模型(BTM 模型)的可读且有意义的可视化 BTM 通过 textplottextplot::plot.BTM() 是一种创建使用 BTM::BTM() 创建的模型的集群可视化的方法。 BTM::BTM() 的文档和 textplot::plot.BTM() 的文档都包含专门用于绘图的代码示例。根据文档,textplot::plot.BTM() return 是 class ggplot 的对象。

以前的尝试和观察

安装这些示例中提到的软件包后,即 concavemanggraphigraph,我可以成功复制这些示例图。另外,我自己的情节看起来像例子。

不过,当我开始新的 R 会话和 运行 我的脚本( 请参阅下面的最小代码)时,我的情节突然看起来完全不同了。簇形状的颜色,尤其是边缘的颜色不再像 demo plots, but rather dark and bright shades, e.g. a dark brown that yields a low contrast regarding the black tokens (see this screenshot) 中那样是淡淡的柔和色调。除此之外,边缘变得非常厚,因此它们覆盖并超过了下面的簇形状。这样一来,情节就不可读了,看起来肯定是破烂的。

我注意到 R 输出类似*

Load required namespace: ggraph
Load required namespace: concaveman

当我运行 textplot::plot.BTM()时,尽管有时出于未知原因只提到concaveman。调用 class() 表示 return 值是 class ggraph 继承自 ggplot。在我看来,这些包已正确安装并在需要时由函数使用。所有涉及的包都已更新,即安装 BTM 0.3.1 和 textplot 0.1.2 以明确提及核心包版本。

我的问题

  1. 如何确保我的绘图始终如预期所示,即具有淡淡的柔和色调和适当大小的边缘?
  2. 为什么我的绘图看起来不一样,即有明亮的深色阴影和极厚的边缘?
  3. 关于可读性的额外问题;):如何确保 所有 标记具有可读的字体大小?我在我的和示例图中都注意到,低频率的标记非常小,因此难以阅读。

非常感谢您的帮助!

这是我第一次 post 在 Whosebug 上,所以如果我错过了提问的最佳实践,请告诉我。

最小代码

library(BTM)
library(textplot)
library(udpipe)
    
data("brussels_reviews_anno", package = "udpipe")
brussel_reviews <- subset(brussels_reviews_anno, language == "nl")
brussel_reviews <- subset(brussel_reviews, xpos %in% c("NN", "NNP", "NNS"))
brussel_reviews <- brussel_reviews[, c("doc_id", "lemma")]
    
btm_model <- BTM(brussel_reviews, k = 5)
    
plot(btm_model, top_n = 15,
     title = "Topic Clusters of Top 15 Biterms",
     labels = c("1 - Too dark color masking terms",
                "2 - Looks okish",
                "3 - Too thick edges",
                "4 - Too thick edges",
                "5 - Too thick edges"))

我实际上在发布我的问题后不久就找到了问题 2 的答案,而且还与 BTM 包的开发人员联系以澄清问题 1 并想与您分享我自己的字。虽然,我可能没有完全准确地解释每个细节,所以欢迎指正。

总结

  1. 有多正确?在每个每个会话中附加ggraph包(请参阅下面更正的最小代码).
  2. 为什么不对? 附加了ggraph,绘图是用ggraph添加的另一种方法绘制的。
  3. 如何确保可读标记?我看不到任何选择,因为我们无法改变某些标记很少与其相邻术语同时出现的事实。尽管如此,仍可以引入可读的最小显示尺寸。我会考虑使用较小的滑动 window 来避免罕见的双术语,例如BTM::BTM(window = 5).

更正了最小代码

library(BTM)
library(ggraph)
library(textplot)
library(udpipe)

[...]

详情

  1. 如何? 要使 BTM 绘图看起来符合预期,您不仅需要安装软件包 concavemanggraphigraph,但 在每个 会话 中附加 ggraph. (当然,还需要 BTM 来生成 BTM 模型以进行可视化。) 查看 BTMtextplot 的文档,令人惊讶的是 ggraph 总是 附在任何示例代码中。不过,起初,我将列表理解为需要安装哪些包,不一定要附加,尤其是在看到包列表因示例而异之后: BTM::BTM() 提及:
library(igraph)
library(BTM)
library(ggraph)

textplot::plot.BTM() 提到:

library(textplot)
library(ggraph)
library(concaveman)

textplot::textplot_bitermclusters(),底层函数,提到:

library(igraph)
library(ggraph)
library(concaveman)
library(BTM)
  1. 为什么? 使用我的最少代码,绘图看起来不同,因为没有附加包 ggraphplot.BTM() 正确地 生成 绘图对象不需要附加 ggraph,但要 打印 正确。更准确地说,ggraph 通过 ggplot2::print.ggplot() 绘图,但通过 ggraph 个对象的方法扩展了内部通用函数 ggplot2::ggplot_build(),即 ggplot_build.ggraph()。在那里,如何绘制的算法在调用 ggplot_build.ggplot() 之前临时更改,产生不同的、更令人愉悦的外观。
  2. 确保可读标记?textplot::plot.BTM() 中,标记大小似乎取决于标记与其相邻标记在主题集群中同时出现的频率。我想要设置有意义的最小显示大小的选项,因为我认为包括我无法读取的标记没有意义,特别是考虑到我无法从标记大小准确地推断出频率。要尝试的一件事是缩小滑动 window 的范围,例如通过BTM::BTM(window = 5)。那样的话,我可能会避免太多罕见的标记组合,从而避免情节中的微小标记。不过我不确定。