Streudiagramm mit Kontur- / Wärmeüberlagerung

23

Ich habe dieses Diagramm in der Beilage eines kürzlich erschienenen Papiers gesehen und würde es gerne mit R reproduzieren. Es ist ein Streudiagramm, aber um die Überzeichnung zu korrigieren, gibt es Konturlinien, die entsprechend der "Hitze" blau bis rot gefärbt sind Überzeichnungsdichte. Wie würde ich das machen?

Bildbeschreibung hier eingeben

Stephen Turner
quelle
5
Diese StackOverflow-Frage zeigt einige Optionen für ggplot2 für diese Art von Plot, einschließlich der Punkte für Scatterplot +.
Joran

Antworten:

30

Hier ist meine Einstellung, bei der Basisfunktionen nur zum Zeichnen verwendet werden:

library(MASS)  # in case it is not already loaded 
set.seed(101)
n <- 1000
X <- mvrnorm(n, mu=c(.5,2.5), Sigma=matrix(c(1,.6,.6,1), ncol=2))

## some pretty colors
library(RColorBrewer)
k <- 11
my.cols <- rev(brewer.pal(k, "RdYlBu"))

## compute 2D kernel density, see MASS book, pp. 130-131
z <- kde2d(X[,1], X[,2], n=50)

plot(X, xlab="X label", ylab="Y label", pch=19, cex=.4)
contour(z, drawlabels=FALSE, nlevels=k, col=my.cols, add=TRUE)
abline(h=mean(X[,2]), v=mean(X[,1]), lwd=2)
legend("topleft", paste("R=", round(cor(X)[1,2],2)), bty="n")

Bildbeschreibung hier eingeben

Für ein ausgefalleneres Rendering sollten Sie sich ggplot2 und anschauenstat_density2d() . Eine andere Funktion, die ich mag, ist smoothScatter():

smoothScatter(X, nrpoints=.3*n, colramp=colorRampPalette(my.cols), pch=19, cex=.8)

Bildbeschreibung hier eingeben

chl
quelle
2
Wäre schön, wenn man die Konturdarstellung so steuern könnte, dass sie bestimmte Quantile / Perzentile / Dezile enthält (oder was Sie haben).
Roman Luštrik
Schrecklich, ich habe schon lange nach so etwas gesucht, nach einer hochwertigen Handlung
WAF
26

Niemand hat dazu ggplot2 vorgeschlagen ??

library(MASS)
library(ggplot2)
n <- 1000
x <- mvrnorm(n, mu=c(.5,2.5), Sigma=matrix(c(1,.6,.6,1), ncol=2))
df = data.frame(x); colnames(df) = c("x","y")

commonTheme = list(labs(color="Density",fill="Density",
                        x="RNA-seq Expression",
                        y="Microarray Expression"),
                   theme_bw(),
                   theme(legend.position=c(0,1),
                         legend.justification=c(0,1)))

ggplot(data=df,aes(x,y)) + 
  geom_density2d(aes(colour=..level..)) + 
  scale_colour_gradient(low="green",high="red") + 
  geom_point() + commonTheme

Welche erzeugt die folgenden:

Beispiel 1

Es können jedoch auch andere Aufgaben erledigt werden, wie zum Beispiel die folgenden:

ggplot(data=df,aes(x,y)) + 
  stat_density2d(aes(fill=..level..,alpha=..level..),geom='polygon',colour='black') + 
  scale_fill_continuous(low="green",high="red") +
  geom_smooth(method=lm,linetype=2,colour="red",se=F) + 
  guides(alpha="none") +
  geom_point() + commonTheme

Welche erzeugt die folgenden:

Bildbeschreibung hier eingeben

ADP
quelle