Zipf_plot(): Как сравнить два объекта в одном графике?

Я пытаюсь использовать функцию Zipf_plot из пакета tm для сравнения двух разных терминов-матриц документа - и я не эксперт по R. Может быть, вы могли бы мне сказать, есть ли способ совместить обе функции в этой функции?

Zipf_plot(x, type = "l", ... )

Я знаю, что есть возможность получить оба (или больше) из них в одном окне:

par(mfrow=c())

но я бы очень признателен за решение с двумя или более DTM на одном графике.

Заранее спасибо!:-)

1 ответ

Решение

Вы могли бы попробовать par(new=T) или попробуйте настроить функцию в соответствии с вашими потребностями, например:

library(tm)
data("acq")
data("crude")
m1 <- DocumentTermMatrix(acq)
m2 <- DocumentTermMatrix(crude)
Zipf_plot(m1, col = "red")
par(new=T)
Zipf_plot(m2, col="blue")
Zipf_plot_multi <- function (xx, type = "l", cols = rainbow(length(xx)), ...) {
    stopifnot(is.list(xx) & length(xx)==length(cols))
    for (idx in seq_along(xx)) {
      x <- xx[[idx]]
      if (inherits(x, "TermDocumentMatrix")) 
          x <- t(x)
      y <- log(sort(slam::col_sums(x), decreasing = TRUE))
      x <- log(seq_along(y))
      m <- lm(y ~ x)
      dots <- list(...)
      if (is.null(dots$xlab)) 
          dots$xlab <- "log(rank)"
      if (is.null(dots$ylab)) 
          dots$ylab <- "log(frequency)"
      if (idx==1) {
        do.call(plot, c(list(x, y, type = type, col = cols[idx]), dots))
      } else {
        lines(x, y, col = cols[idx])
      }
      abline(m, col = cols[idx], lty = "dotted")
      print(coef(m))
    }
}
Zipf_plot_multi(list(m1, m2), xlim=c(0, 7), ylim=c(0,6))

Другие вопросы по тегам