R: добавить название в wordcloud graphics/png
У меня есть рабочий R-код, который генерирует облако тегов из матрицы term-document.
Теперь я хочу создать целую кучу облаков тегов из многих документов и проверить их визуально позже.
Чтобы узнать, к какому документу/корпусу принадлежит изображение тега-облака, я хотел бы добавить заголовок к сгенерированной графике. Как мне это сделать?
Возможно, это очевидно, но я все еще новичок в R-графике.
Мой собственный корпус слишком велик, чтобы перечислить его здесь, но код из этого вопроса SO (в сочетании с кодом из принятого ответа от пользователя SO Andrie можно использовать:
Пробелы в wordcloud
Я хочу добавить пользовательский заголовок и еще один пользовательский текст к изображению, например this
Ответы
Ответ 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()
})