Как избежать кластерных визуализаций textplot :: plot.BTM () с очень толстыми краями с низкоконтрастными цветовыми оттенками? - PullRequest
0 голосов
/ 27 мая 2020

Цель и инструменты

Сейчас я пытаюсь ознакомиться с пакетами R BTM и textplot, вот как для создания удобочитаемых и значимых визуализаций моделей biterm topi c (моделей BTM), созданных с помощью BTM через textplot. textplot::plot.BTM() - это метод, который создает кластерную визуализацию моделей, созданных с помощью BTM::BTM(). Как документация BTM::BTM(), так и документация textplot::plot.BTM() содержат примеры кода, предназначенные для построения графиков. Согласно документации, textplot::plot.BTM() возвращает объект класса ggplot.

Предыдущие попытки и наблюдения

После установки пакетов, упомянутых в этих примерах, а именно concaveman, ggraph и igraph, я смог успешно воспроизвести эти примеры графиков. Кроме того, мои собственные графики выглядели как примеры.

Хотя, когда я начинаю с сеанса fre sh R и запускаю свой сценарий ( см. Минимальный код ниже ), мои графики внезапно выглядят достаточно разный. Цвета форм кластера и особенно краев больше не являются светлыми пастельными оттенками, как на демонстрационных графиках , а скорее темными и яркими оттенками, например темно-коричневым, который дает низкий контраст относительно черных маркеров ( см. Этот снимок экрана ). Кроме того, края стали очень толстыми, поэтому они закрывают и превосходят формы кластеров внизу. Таким образом, сюжет нечитаем и определенно выглядит сломанным.

Я заметил, что R выводит что-то вроде *

Load required namespace: ggraph
Load required namespace: concaveman

, когда я запускаю textplot::plot.BTM(), хотя иногда по неизвестной причине упоминается только concaveman. Вызов class() указывает, что возвращаемое значение относится к классу ggraph, который наследуется от ggplot. Мне кажется, что эти пакеты правильно установлены и используются функцией при необходимости. Все задействованные пакеты обновлены, то есть установлены BTM 0.3.1 и textplot 0.1.2, чтобы явно указать версии основных пакетов.

  • Я получил их на немецком языке и перевел буквально.

Мои вопросы

  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"))

1 Ответ

0 голосов
/ 05 июня 2020

Я действительно нашел ответ на вопрос 2 вскоре после публикации своего вопроса, но также связался с разработчиком пакета BTM, чтобы прояснить вопрос 1, и хотел бы поделиться с вами своими словами. Хотя я могу не объяснить все детали полностью точно, поэтому исправления приветствуются.

Сводка

  1. Насколько правильно? Прикрепите пакет ggraph к каждый сеанс ( см. исправленный минимальный код ниже ).
  2. Почему неправильно? С прикрепленным ggraph график строится с помощью другого метода, добавленного ggraph.
  3. Как обеспечить читаемость токенов? Я не вижу другого варианта, потому что мы не можем изменить это, некоторые токены очень редко совпадают с условиями их соседей. Тем не менее, можно было бы ввести читаемый минимальный размер дисплея. Я буду рассматривать меньшее скользящее окно, чтобы избежать редких битермов, например, BTM::BTM(window = 5).

Исправленный минимальный код

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

[...]

Подробности

  1. Как? Чтобы графики 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(), но для печати объектов графика * правильно. Точнее, ggraph строит графики через ggplot2 :: print.ggplot (), но расширяет внутреннюю generi c функцию ggplot2::ggplot_build() методом для ggraph объектов, а именно ggplot_build.ggraph(). Там алгоритм построения графика временно изменен перед вызовом ggplot_build.ggplot(), что дает другой, более приятный вид. Обеспечить читаемость токенов? В textplot::plot.BTM() кажется, что Размер токена зависит от того, как часто токен взаимодействует с соседними токенами в кластере topi c. Я бы хотел установить значимый минимальный размер отображения, потому что я не вижу смысла включать токены, которые я не могу прочитать, особенно с учетом того, что я не могу точно определить частоту по размеру токена. Можно попробовать сузить скользящее окно, в которое встроены битермы, например, BTM::BTM(window = 5). Таким образом, я мог бы избежать слишком большого количества редких комбинаций жетонов и, следовательно, крошечных жетонов в сюжете. Хотя я не уверен.
...