Scatterplot dengan kontur / panas overlay


23

Saya melihat plot ini dalam suplemen kertas baru - baru ini dan saya ingin dapat mereproduksi menggunakan R. Ini adalah sebaran, tetapi untuk memperbaiki overplotting ada garis kontur yang "panas" berwarna biru ke merah sesuai dengan kepadatan overplotting. Bagaimana saya melakukan ini?

masukkan deskripsi gambar di sini


5
Pertanyaan StackOverflow ini menunjukkan beberapa opsi ggplot2 untuk plot semacam ini, termasuk titik scatterplot +.
joran

Jawaban:


30

Inilah yang saya ambil, hanya menggunakan fungsi dasar untuk menggambar:

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")

masukkan deskripsi gambar di sini

Untuk rendering yang lebih mewah, Anda mungkin ingin melihat pada ggplot2 dan stat_density2d(). Fungsi lain yang saya suka adalah smoothScatter():

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

masukkan deskripsi gambar di sini


2
Akan lebih baik jika seseorang dapat mengendalikan plot kontur untuk memasukkan kuantil / persentil / desil tertentu (atau apa pun yang Anda miliki).
Roman Luštrik

Mengagumkan, saya sudah lama mencari hal seperti itu, plot berkualitas bagus
WAF

26

Tidak ada yang menyarankan ggplot2 untuk ini ??

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

Yang menghasilkan sebagai berikut:

Contoh 1

Namun, hal-hal lain juga dapat dilakukan dengan mudah, seperti yang berikut:

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

Yang menghasilkan sebagai berikut:

masukkan deskripsi gambar di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.