2012-02-27 10 views
5

Sto disegnando dotplot() utilizzando lattice o Dotplot() utilizzando Hmisc. Quando uso i parametri di default, posso tracciare le barre di errore di piccole terminazioni verticaliDisegna la fine verticale della riga della barra di errore in dotplot

--o--

ma vorrei ottenere

| - O-- |

so che posso ottenere

| --o-- |

quando uso centipede.plot() da plotrix o segplot() da latticeExtra, ma queste soluzioni non mi danno queste opzioni piacevoli condizionata Dotplot(). Stavo cercando di giocare con par.settings di plot.line, che funziona bene per cambiare errore di colore linea di bar, larghezza, ecc, ma finora ho avuto successo in aggiunta terminazioni verticali:

require(Hmisc) 
mean = c(1:5) 
lo = mean-0.2 
up = mean+0.2 
d = data.frame (name = c("a","b","c","d","e"), mean, lo, up) 
Dotplot(name ~ Cbind(mean,lo,up),data=d,ylab="",xlab="",col=1,cex=1, 
     par.settings = list(plot.line=list(col=1), 
         layout.heights=list(bottom.padding=20,top.padding=20))) 

enter image description here

Per favore, non darmi soluzioni che usano ggplot2 ...

+0

Un punto di partenza potrebbe essere quella di utilizzare 'bwplot' e modificare il pannello, vale a dire' panel.bwplot'. – Andrie

+0

I seguenti thread potrebbero essere utili. http://r.789695.n4.nabble.com/dotplots-with-error-bars-td4382474.html http://tolstoy.newcastle.edu.au/R/e2/help/06/10/2791.html –

risposta

6

Ho avuto questo stesso bisogno in passato, con barchart() anziché con Dotplot().

La mia soluzione era quindi quella di creare una funzione di pannello personalizzata che: (1) prima eseguisse la funzione del pannello originale; e (2) quindi usa panel.arrows() per aggiungere la barra di errore (usando una freccia a due punte, in cui i bordi della testa formano un angolo di 90 gradi con l'albero).

Ecco che cosa potrebbe essere simile con Dotplot():

# Create the customized panel function 
mypanel.Dotplot <- function(x, y, ...) { 
    panel.Dotplot(x,y,...) 
     tips <- attr(x, "other") 
     panel.arrows(x0 = tips[,1], y0 = y, 
        x1 = tips[,2], y1 = y, 
        length = 0.15, unit = "native", 
        angle = 90, code = 3) 
} 

# Use almost the same call as before, replacing the default panel function 
# with your customized function. 
Dotplot(name ~ Cbind(mean,lo,up),data=d,ylab="",xlab="",col=1,cex=1, 
     panel = mypanel.Dotplot, 
     par.settings = list(plot.line=list(col=1), 
         layout.heights=list(bottom.padding=20,top.padding=20))) 

enter image description here

+0

Bello! Ho pensato che quelle funzioni del pannello possono fare magie, ma il manuale di lattice non è semplice e ci sono molti approcci che si possono adottare per cambiare i parametri. Acclamazione amico! –

+0

Hmm ora ho un problema con esso perché non funziona quando si applicano due ulteriori condizioni. Guardalo aggiungendo un'altra condizione: 'Dotplot (nome ~ Cbind (mean, lo, up) | condX * condY, ...)'. Qualche idea? –

+0

@GeekOnAcid - Non ho tempo adesso. Quello che suggerirei è di mettere una riga che legge 'browser()' all'interno della funzione del pannello personalizzato (la prima riga dovrebbe fare). Quindi, quando/se viene chiamata quella funzione del pannello, interromperà l'esecuzione, e si può attirare l'attenzione, per vedere se, ad esempio, 'tips <- attr (x," other ")' estrae ancora i dati corretti . (Se stavi usando 'groups =' piuttosto che condizionamento (tramite '|'), direi che potresti dover gestire l'intero 'pannello.superpose() 'morass, ma io * credo * che probabilmente non è questo il problema qui. –

Problemi correlati