2012-06-25 13 views
35

Vorrei creare una versione pulita di uno scatterplot di etichette di testo in ggplot2. L'obiettivo è rappresentare visivamente i valori crescenti associati a circa 25 articoli. Sto già usando "position_jitter", ma mi chiedo se posso fare di meglio.Come modificare il testo per evitare sovrapposizioni in un diagramma di dispersione ggplot2?

Ecco alcuni dati finto:

title <- rep("A Really Rather Long Text Label", 25) 
value <- runif(25, 1,10) 
spacing <- seq(1:25) 
df <- data.frame(title, value, spacing, stringsAsFactors = FALSE) 

E qui è il codice che genera il grafico:

library(ggplot2) 
myplot <- ggplot(data=df, aes(x=spacing, y=value, label = title)) + 
geom_text(aes(colour = value), 
    size = 2.5, fontface = "bold", 
    vjust = 0, 
    position = position_jitter(width=5, height=0)) + 
theme_bw() + 
scale_x_continuous(limits = c(-5, 30))+ 
scale_colour_gradient(low = "#6BAED6", high = "#08306B") + 
theme(axis.title.x = element_blank(), 
     axis.ticks = element_blank(), 
     axis.text.x = element_blank(), 
     legend.position = "none") 
myplot 

V'è abbondanza di spazio per tutti di questo testo in un grafico di dimensioni ragionevoli - a condizione che il testo sia libero di spostarsi per quanto necessario in orizzontale! Non voglio oscillare verticalmente, perché il punto è mostrare il valore y associato a ciascuna etichetta di testo.

Il grafico risulta leggermente diverso ogni volta che si esegue il comando ggplot e talvolta i risultati di jitter sono migliori di altre volte. Ma non ho trovato un modo per impedire sistematicamente che le etichette si sovrappongano.

Sarei grato per qualsiasi suggerimento su come pulire il posizionamento orizzontale del testo senza dover spostare manualmente singoli elementi. Sarei anche lieto di ascoltare altri suggerimenti su come migliorare questo tipo di rappresentazione visiva.

+5

Quasi un duplicato; per lo meno si può trovare [questo] (http://stackoverflow.com/q/7611169/324364) domanda su come informativo come ogni risposta che otterrete qui. – joran

+0

Grazie per il link: non l'avrei trovato attraverso i termini che stavo cercando, ed è utile sapere quando non esiste una soluzione automatizzata semplice. Sotto quella domanda precedente, si fa una buona argomentazione per una soluzione manuale. In questo spirito, ecco un altro veloce (anche se limitato) modo di modificare la trama del PDF: apri in Adobe Acrobat, scegli lo strumento "Modifica testo documento" e aggiungi spazi all'inizio di un'etichetta sovrapposta. Questa rotta consente solo di spostare il testo selezionato a destra, ma potrebbe essere sufficiente per qualcuno che non sta cercando una trama di qualità di pubblicazione. – user1257313

+1

Bene, ti ho anche indirizzato a quel post perché ha un elenco abbastanza completo di funzioni/pacchetti che tentano di farlo per te. – joran

risposta

5

Date un'occhiata al pacchetto di FField

install.packages("FField", type = "source") 
install.packages("ggplot2") 
install.packages("gridExtra") 
library(FField) 
FFieldPtRepDemo() 

(da questo post https://stats.stackexchange.com/a/62856)

Problemi correlati