Подтвердить что ты не робот

R: добавить название в wordcloud graphics/png

У меня есть рабочий R-код, который генерирует облако тегов из матрицы term-document.

Теперь я хочу создать целую кучу облаков тегов из многих документов и проверить их визуально позже. Чтобы узнать, к какому документу/корпусу принадлежит изображение тега-облака, я хотел бы добавить заголовок к сгенерированной графике. Как мне это сделать?

Возможно, это очевидно, но я все еще новичок в R-графике.

Мой собственный корпус слишком велик, чтобы перечислить его здесь, но код из этого вопроса SO (в сочетании с кодом из принятого ответа от пользователя SO Andrie можно использовать: Пробелы в wordcloud Я хочу добавить пользовательский заголовок и еще один пользовательский текст к изображению, например this

4b9b3361

Ответ 1

Функция wordcloud() заполняет весь график. Это означает, что вам нужно зарезервировать место на графическом устройстве для заголовка перед построением графика.

Так как wordcloud используют базовые графсы, вы можете сделать это с помощью par(mfrow=...) или layout(). Затем создайте заголовок сюжета с помощью text().

Я иллюстрирую layout(), адаптируя пример в ?wordcloud:

library(tm)
library(wordcloud)

x <- "Many years ago the great British explorer George Mallory, who 
was to die on Mount Everest, was asked why did he want to climb 
it. He said, \"Because it is there.\"

Well, space is there, and we're going to climb it, and the 
moon and the planets are there, and new hopes for knowledge 
and peace are there. And, therefore, as we set sail we ask 
God blessing on the most hazardous and dangerous and greatest 
adventure on which man has ever embarked."

layout(matrix(c(1, 2), nrow=2), heights=c(1, 4))
par(mar=rep(0, 4))
plot.new()
text(x=0.5, y=0.5, "Title of my first plot")
wordcloud(x, main="Title")

Это генерирует:

enter image description here

Ответ 2

Одна идея заключается в том, чтобы импортировать изображения и сохранять их снова с помощью grid.raster, а затем добавить titile с помощью grid.text. Например:

ll <- list.files(patt='*.png')
library(png)
library(grid)
imgs <- lapply(ll,function(x){
  img <- as.raster(readPNG(x))
  ## get the file name
  x.name <- gsub('(.*).png','\\1',x)
  ## new device for new image version
  png(file =paste(x.name,'_modified','.png',sep=''))
  grid.raster(img)
  ## here I add title
  grid.text(label = x.name,x=0.5,y=0.9,gp=gpar(cex=2))
  dev.off()

})