Je peux générer un graphique de densité de données 1D avec:
qplot(mydatapoints, geom='density')
J'ai également vu de nombreux exemples de grilles de cartes thermiques, mais elles s'apparentent davantage à des histogrammes pour des données 1D dans la mesure où les données sont placées dans des compartiments discrets au lieu d'afficher une courbe lisse.
Puis-je tracer quelque chose de similaire à la densité 1D mais pour les données 2D, avec (disons) quelque chose comme teinte/saturation/luminosité pour représenter la densité?
Je pense que vous voulez une estimation de densité 2D, qui est implémentée par kde2d
Dans le package MASS
.
df <- data.frame(x=rnorm(10000),y=rnorm(10000))
via MASS
et base R:
k <- with(df,MASS:::kde2d(x,y))
filled.contour(k)
via ggplot
(geom_density2d()
appelle kde2d()
)
library(ggplot2)
ggplot(df,aes(x=x,y=y))+geom_density2d()
Je trouve que filled.contour
Est plus attrayant, mais c'est très compliqué de travailler avec si vous voulez modifier quoi que ce soit car il utilise layout
et reprend la mise en page. S'appuyant sur la réponse de Brian Diggs, qui remplit les couleurs entre les contours: voici l'équivalent avec différents niveaux alpha, avec des points transparents ajoutés pour comparaison.
ggplot(df,aes(x=x,y=y))+
stat_density2d(aes(alpha=..level..), geom="polygon") +
scale_alpha_continuous(limits=c(0,0.2),breaks=seq(0,0.2,by=0.025))+
geom_point(colour="red",alpha=0.02)+
theme_bw()
Combiner deux autres réponses (l'une pointant vers geom_density2d
et une donnant des exemples de données et scale_colour_gradient
):
df <- data.frame(x=rnorm(10000),y=rnorm(10000))
ggplot(df,aes(x=x,y=y))+
stat_density2d(aes(fill=..level..), geom="polygon") +
scale_fill_gradient(low="blue", high="green")
Il y a aussi scale_colour_gradient()
df <- data.frame(x=rnorm(10000),y=rnorm(10000))
ggplot(df, aes(x,y,colour=y)) + geom_point() + scale_colour_gradient(low="blue",high="red")