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


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


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.