目标和工具
我目前尝试熟悉R包BTM
和textplot
,即如何创建通过textplot
创建BTM
双项主题模型(BTM 模型)的可读性和有意义的可视化。textplot::plot.BTM()
是一种创建使用BTM::BTM()
创建的模型的群集可视化的方法。BTM::BTM()
的文档和textplot::plot.BTM()
的文档都包含专用于绘图的代码示例。根据文档,textplot::plot.BTM()
返回类ggplot
的对象。
以前的尝试和观察
安装这些示例中提到的软件包(即concaveman
、ggraph
和igraph
)后,我可以成功地复制这些示例图。另外,我自己的情节看起来像例子。
但是,当我从新的 R 会话开始并运行我的脚本(请参阅下面的最小代码)时,我的绘图突然看起来不同。聚类形状的颜色,尤其是边缘,不再是演示图中的浅色柔和色调,而是深色和明亮的色调,例如深棕色,与黑色标记产生低对比度(请参阅此屏幕截图)。除此之外,边缘变得非常厚,因此它们覆盖并超过了下面的簇形。这样,情节是不可读的,绝对看起来很破碎。很奇怪。
我注意到R输出类似*
Load required namespace: ggraph
Load required namespace: concaveman
当我运行textplot::plot.BTM()
时,尽管有时由于未知原因只提到concaveman
。调用class()
表示返回值属于从ggplot
继承的类ggraph
。在我看来,如果需要,这些功能可以正确安装和使用这些软件包。所有相关软件包都会更新,即安装 0.3.1 和 0.1.2BTM
textplot
以明确提及核心软件包版本。
*我得到这些德语和字面翻译。
我的问题
- 如何确保我的绘图始终按预期显示,即具有浅色柔和的阴影和适当大小的边缘?
- 为什么我的绘图看起来不同,即具有明亮的深色阴影和极厚的边缘?
- 关于可读性;)的额外问题:如何确保所有令牌都具有可读的字体大小?我注意到在我的和示例图中,低频率的标记非常小,因此难以阅读。
非常感谢您的帮助!
这是我关于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,并希望用我自己的话与您分享。不过,我可能不会完全准确地解释每个细节,因此欢迎更正。
总结
-
如何正确?
在每个会话中附加
ggraph
包(请参阅下面更正的最小代码)。 -
为什么错了?附上
ggraph
后,使用ggraph
添加的另一种方法绘制绘图。 -
如何确保令牌可读?我认为别无选择,因为我们不能改变某些代币很少与它们的邻居术语共存。尽管如此,仍然可以引入可读的最小显示尺寸。我会考虑一个较小的滑动窗口,以避免罕见的双项,例如
BTM::BTM(window = 5)
.
更正的最小代码
library(BTM)
library(ggraph)
library(textplot)
library(udpipe)
[...]
详
- 如何?要使
BTM
绘图看起来符合预期,您不仅需要安装软件包concaveman
、ggraph
和igraph
,但在每个会话中附加ggraph
包。(当然,还需要BTM
来生成BTM模型以进行可视化。 查看BTM
和textplot
的文档,令人惊讶的是,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)
- 为什么?使用我的最小代码,绘图看起来不同,因为未附加包
ggraph
。附加ggraph
不是由plot.BTM()
正确生成打印对象所必需的,但要正确打印打印对象。更准确地说,通过 ggplot2::p rint.ggplot()ggraph
绘图,但通过ggraph
对象的方法扩展内部泛型函数ggplot2::ggplot_build()
,即ggplot_build.ggraph()
。在那里,如何绘制的算法在调用ggplot_build.ggplot()
之前会暂时改变,从而产生不同的、更愉快的外观。 - 确保令牌可读?在
textplot::plot.BTM()
中,令牌大小似乎取决于令牌与其相邻令牌在主题集群中共存的频率。我希望可以选择设置有意义的最小显示大小,因为我认为包含我无法读取的令牌没有意义,特别是考虑到无论如何我都无法从令牌大小中推断出频率。要尝试的一件事是缩小双项内置的滑动窗口,例如BTM::BTM(window = 5)
.这样,我可能会避免太多罕见的代币组合,从而避免情节中的小代币。不过,我不确定。