2014-05-13 3 views
1

J'ai quelques données:densité de recouvrement d'une variable sur la ligne de tendance

dat <- data.frame(x=rnorm(100,100,100),y=rnorm(100,100,100)) 

je peux tracer avec une ligne de tendance locale:

ggplot(dat, aes(x,y)) + stat_smooth() 

Mais je veux superposer une courbe de densité, sur le même complot, montrant la distribution de x. Donc, il suffit d'ajouter le graphique précédent à celui-ci (l'axe y est différent, mais je ne se soucient que des différences par rapport à la courbe de densité de toute façon):

ggplot(dat, aes(x)) + geom_density() 

Je sais qu'il ya stat_binhex() et stat_sum() etc montrant où les données chutes . Il n'y a que quelques valeurs y, donc ce qui est tracé par stat_binhex() etc est difficile à lire.

+1

Au lieu de superposant, pourrait vous être intéressé par les plaçant côte à côte? Si oui, il y a des exemples à cette question: [Scatterplot avec des histogrammes marginaux dans ggplot2] (http://stackoverflow.com/questions/8545035/scatterplot-with-marginal-histograms-in-ggplot2) – MrFlick

Répondre

2

Vous pouvez tracer une combinaison d'histogrammes et de courbes de densité sur les deux côtés du diagramme de dispersion. Dans l'exemple ci-dessous j'ai aussi inclus une ellipse de confiance:

require(ggplot2) 
require(gridExtra) 
require(devtools) 
source_url("https://raw.github.com/low-decarie/FAAV/master/r/stat-ellipse.R") # in order to create a 95% confidence ellipse 

htop <- ggplot(data=dat, aes(x=x)) + 
    geom_histogram(aes(y=..density..), fill = "white", color = "black", binwidth = 2) + 
    stat_density(colour = "blue", geom="line", size = 1.5, position="identity", show_guide=FALSE) + 
    scale_x_continuous("x-var", limits = c(-200,400), breaks = c(-200,0,200,400)) + 
    scale_y_continuous("Density", breaks=c(0.0,0.01,0.02), labels=c(0.0,0.01,0.02)) + 
    theme_bw() + theme(axis.title.x = element_blank()) 

blank <- ggplot() + geom_point(aes(1,1), colour="white") + 
    theme(axis.ticks=element_blank(), panel.background=element_blank(), panel.grid=element_blank(), 
     axis.text.x=element_blank(), axis.text.y=element_blank(), axis.title.x=element_blank(), axis.title.y=element_blank()) 

scatter <- ggplot(data=dat, aes(x=x, y=y)) + 
    geom_point(size = 0.6) + stat_ellipse(level = 0.95, size = 1, color="green") + 
    scale_x_continuous("x-var", limits = c(-200,400), breaks = c(-200,0,200,400)) + 
    scale_y_continuous("y-var", limits = c(-200,400), breaks = c(-200,0,200,400)) + 
    theme_bw() 

hright <- ggplot(data=dat, aes(x=y)) + 
    geom_histogram(aes(y=..density..), fill = "white", color = "black", binwidth = 1) + 
    stat_density(colour = "red", geom="line", size = 1, position="identity", show_guide=FALSE) + 
    scale_x_continuous("y-var", limits = c(-200,400), breaks = c(-200,0,200,400)) + 
    scale_y_continuous("Density", breaks=c(0.0,0.01,0.02), labels=c(0.0,0.01,0.02)) + 
    coord_flip() + theme_bw() + theme(axis.title.y = element_blank()) 

grid.arrange(htop, blank, scatter, hright, ncol=2, nrow=2, widths=c(4, 1), heights=c(1, 4)) 

le résultat: enter image description here

Questions connexes