2014-12-25 12 views
11

Esiste un modo generale per disegnare densità (grafici di violini) o istogrammi che mostrano la distribuzione di lungo una curva liscia (x,y)? Io uso questo approccio per mostrare la distribuzione marginale di x quando ci sono più gruppi (ad esempio, curve diverse su un pannello, delineate da colori diversi).Disegno di istogrammi o densità lungo curve uniformi utilizzando ggplot2

Ecco un esempio utilizzando funzione il pacchetto di Hmiscplsmo per ottenere curve loess stratificate e spike istogrammi mostra la densità -specific dati sex per age.

require(Hmisc) 
set.seed(1) 
age <- rnorm(500, 50, 15) 
y <- sample(0:1, 500, TRUE) 
sex <- sample(c('female','male'), 500, TRUE) 
plsmo(age, y, group=sex, col=1:2, 
     datadensity=TRUE, scat1d.opts=list(nhistSpike=20)) 

enter image description here

+3

Come si specifica la curva morbida? Sarebbe utile avere un [esempio riproducibile] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) per vedere come appare il tuo input. – MrFlick

+0

Non riesco a capire cosa sta valutando e tracciando plsmo. Avrei immaginato che stavi descrivendo una densità 1-d: 'densityplot (~ age, groups = sex, data = dat)' per cui la controparte ggplot2 sarebbe: 'p <- ggplot (data = dat, aes (x = y, y = età, gruppo = sesso)) + geom_violin(); print (p) ' –

+0

' plsmo' sta stimando la relazione tra x e y usando 'lowess()', calcolando quindi gli elementi di un istogramma ad alta risoluzione per la distribuzione della condizione 'x' sulla variabile di raggruppamento e proiettando l'istogramma sul Curve 'lowess'. –

risposta

1

Io credo che si può fare questo con il pacchetto ggsubplot. Vedi the article e the package. Credo che il codice sarà simile:

qplot(age, y, data = dataset, color = sex) + 
    geom_subplot(aes(x, y, data = distributions, group = sex, 
     subplot = geom_violin(aes(x, y, data = distributions)))) 

Ma non credo che il tuo esempio fornisce dettagli sufficienti nel tuo esempio per creare i violini in punti lungo le curve. A meno che non abbia frainteso la tua domanda.

+0

Grazie per il puntatore all'eccellente articolo che ho letto con interesse. Non sono ancora riuscito a capire se le sottotrame mi consentiranno di coordinare punto per punto con il livello principale, che è necessario aggiungere elementi come gli istogrammi degli spike lungo le curve tracciate esistenti. Prendo atto che l'articolo non ha fatto riferimento alle trame di lavoro o termometro di Daniel Carr. –