2011-09-28 2 views
13

Sto cercando di creare un semplice barattolo, ma ho un problema con i nomi duplicati sull'asse x. Quindi, quando mai sto cercando di scrivere nomi sull'asse x, non mostra una stringa completa. Ho seguenti datiCome scrivere etichette in plotter sull'asse x con nomi duplicati?

x <- c(1.8405917,0.3265986,1.5723623,464.7370299,0.0000000,3.2235716, 
     3.1223534, 7.0999787, 1.7122258,3.2005524,3.7531266,469.4436828) 

e sto usando barplot

barplot(x,xlab=c("AA/AA","AA/CC","AA/AC","AA/NC","CC/AA","CC/CC","CC/AC", 
       "CC/NC","AC/AA","AC/CC","AC/AC","AC/NC")) 

Ma non funziona. Ho anche usato

axis() 

Ma non funziona altrettanto bene.

Grazie in anticipo.

+0

Hai ricevuto messaggi di errore? –

risposta

20

No, xlab serve per fornire un'etichetta per l'intero asse x del grafico, non per l'etichettatura delle singole barre.

barplot() prende le etichette per le barre dai nomi del vettore tracciato (o qualcosa che può essere derivato in un insieme di nomi).

> names(x) <- c("AA/AA", "AA/CC", "AA/AC", "AA/NC", "CC/AA", "CC/CC", "CC/AC", 
+    "CC/NC", "AC/AA", "AC/CC", "AC/AC", "AC/NC") 
> barplot(x) 
> ## or with labels rotated, see ?par 
> barplot(x, las = 2) 

Edit: Come cita @Aaron, barplot() ha anche un names.arg di fornire le etichette per le barre. Questo è ciò che ha da dire ?barplot:

names.arg: un vettore di nomi da tracciare sotto ogni barra o gruppo di bar. Se questo argomento viene omesso, i nomi vengono presi dall'attributo names di height se questo è un vettore, oi nomi di colonna se si tratta di una matrice.

Che spiega il comportamento predefinito se non viene fornito names.arg, che consiste nel prendere i nomi dall'oggetto stampato. Quale utilizzo è più utile per te sarà principalmente una questione di gusti. Non avendo la riga/colonna/nomi potrebbe accelerare leggermente il codice, ma molte delle funzioni di R prenderanno l'attributo names (o simili, ad esempio i nomi di riga) direttamente dagli oggetti in modo da non dover continuare a fornire etichette per il tracciamento/etichettatura di risultati ecc.

+0

+1 Bella risposta completa. – Aaron

10

xlab deve essere names.arg. Vedi ?barplot per i dettagli.

+0

+1 per aver notato l'argomento 'names.arg'. –

2

Il modo di utilizzare axis() consiste nel catturare i punti medi, che è ciò che restituisce la funzione del barattolo. Vedi ?barplot:

mids <- barplot(x, xlab="") 

axis(1, at=mids, labels=c("AA/AA","AA/CC","AA/AC","AA/NC","CC/AA","CC/CC", 
          "CC/AC","CC/NC","AC/AA","AC/CC","AC/AC","AC/NC"), 
     las=3) 
3

Prova questa:

barplot(x, cex.names=0.7, 
     names.arg=c("AA/AA","AA/CC","AA/AC","AA/NC","CC/AA","CC/CC","CC/AC", 
        "CC/NC","AC/AA","AC/CC","AC/AC","AC/NC"))