2013-03-05 16 views
11

Ho un codice R funzionante che genera una nuvola di tag da una matrice term-document.R: aggiungi titolo alla grafica wordcloud/png

Ora voglio creare un gruppo di tag cloud da molti documenti e ispezionarli visivamente in un secondo momento. Per sapere a quale/i documento/corpus appartiene l'immagine della tag cloud, vorrei aggiungere un titolo all'immagine generata. Come lo faccio?

Forse questo è ovvio, ma sono ancora un principiante con la grafica R.

mia corpus è troppo grande per elencare qui, ma il codice da questa domanda SO (in combinazione con il modulo di codice la risposta accettata da SO utente Andrie può essere utilizzato: Spaces in wordcloud voglio aggiungere un titolo personalizzato e il testo più personalizzato per una foto come this

risposta

14

la funzione wordcloud() riempie l'intera trama. Ciò significa che è necessario riservare spazio sul dispositivo grafico per il titolo prima della stampa.

Dal wordcloud fare uso di base grap, è possibile farlo con par(mfrow=...) o . Quindi creare il titolo della trama con text().

illustro con layout(), adattando l'esempio in ?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's 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") 

Questo genera:

enter image description here

4

un'idea è quella di importare le immagini, e salvare di nuovo utilizzando grid.raster, e aggiungere il titile utilizzando grid.text ad esempio:.

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

}) 
+0

Questa è una bella idea, forse userò questo per aggiungere informazioni extra per i PNG in seguito. Ma non è esattamente quello che volevo- inserire un titolo al momento della generazione di wordcloud. – knb

+1

@knd Penso che il titolo della tua domanda (png) mi porti all'errore. Andrie ti dà la risposta giusta. Questa risposta è come l'annotazione della trama. – agstudy