Kontur / ısı kaplaması olan saçılma grafiği


23

Bu grafiği yeni bir makalenin ekinde gördüm ve R'yi kullanarak yeniden üretmeyi çok isterdim. Bu bir saçılma grafiği, ancak aşırı lekeyi düzeltmek için kırmızıya karşılık gelen "mavi renkli" sıcak renkli "kontur çizgileri var. fazla çizme yoğunluğu. Bunu nasıl yaparım?

görüntü tanımını buraya girin


5
Bu StackOverflow soruları, scatterplot + noktaları da dahil olmak üzere, bu tür arsa için birkaç ggplot2 seçeneğini gösterir .
joran

Yanıtlar:


30

İşte benim çizim, sadece çizim yapmak için temel fonksiyonları kullanmak:

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

görüntü tanımını buraya girin

Daha fazla fantezi oluşturma için, ggplot2 ve 'ye bakmak isteyebilirsinizstat_density2d() . Sevdiğim başka bir işlev smoothScatter():

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

görüntü tanımını buraya girin


2
Kontur arsalarını belirli miktarları / yüzdelikleri / desileri içerecek şekilde kontrol edebilecek biri olsaydı iyi olurdu.
Roman Luštrik

Korkunç, uzun zamandır böyle smth arıyordum, kaliteli arsa
WAF

26

Hiç kimse bunun için ggplot2'yi önermedi ??

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

Aşağıdakileri üretir:

örnek 1

Bununla birlikte, aşağıdakiler gibi oldukça kolay bir şekilde başka şeyler de yapılabilir:

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

Aşağıdakileri üretir:

görüntü tanımını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.