r - 文本绘图::p很多.BTM():避免在群集可视化中使用粗边缘和奇怪的颜色



目标和工具

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

以前的尝试和观察

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

但是,当我从新的 R 会话开始并运行我的脚本(请参阅下面的最小代码)时,我的绘图突然看起来不同。聚类形状的颜色,尤其是边缘,不再是演示图中的浅色柔和色调,而是深色和明亮的色调,例如深棕色,与黑色标记产生低对比度(请参阅此屏幕截图)。除此之外,边缘变得非常厚,因此它们覆盖并超过了下面的簇形。这样,情节是不可读的,绝对看起来很破碎。很奇怪。

我注意到R输出类似*

Load required namespace: ggraph
Load required namespace: concaveman

当我运行textplot::plot.BTM()时,尽管有时由于未知原因只提到concaveman。调用class()表示返回值属于从ggplot继承的类ggraph。在我看来,如果需要,这些功能可以正确安装和使用这些软件包。所有相关软件包都会更新,即安装 0.3.1 和 0.1.2BTMtextplot以明确提及核心软件包版本。

*我得到这些德语和字面翻译。

我的问题

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

非常感谢您的帮助!

这是我关于stackoverflow的第一篇文章,所以如果我错过了提问的最佳实践,请告诉我。

最少的代码

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. 如何确保令牌可读?我认为别无选择,因为我们不能改变某些代币很少与它们的邻居术语共存。尽管如此,仍然可以引入可读的最小显示尺寸。我会考虑一个较小的滑动窗口,以避免罕见的双项,例如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. 为什么?使用我的最小代码,绘图看起来不同,因为未附加包ggraph。附加ggraph不是由plot.BTM()正确生成打印对象所必需的,但要正确打印打印对象。更准确地说,通过 ggplot2::p rint.ggplot()ggraph绘图,但通过ggraph对象的方法扩展内部泛型函数ggplot2::ggplot_build(),即ggplot_build.ggraph()。在那里,如何绘制的算法在调用ggplot_build.ggplot()之前会暂时改变,从而产生不同的、更愉快的外观。
  2. 确保令牌可读?textplot::plot.BTM()中,令牌大小似乎取决于令牌与其相邻令牌在主题集群中共存的频率。我希望可以选择设置有意义的最小显示大小,因为我认为包含我无法读取的令牌没有意义,特别是考虑到无论如何我都无法从令牌大小中推断出频率。要尝试的一件事是缩小双项内置的滑动窗口,例如BTM::BTM(window = 5).这样,我可能会避免太多罕见的代币组合,从而避免情节中的小代币。不过,我不确定。

最新更新