Scatterplot พร้อม contour / heat overlay


23

ฉันเห็นพล็อตนี้ในส่วนเสริมของกระดาษเมื่อเร็ว ๆ นี้และฉันชอบที่จะสามารถทำซ้ำได้โดยใช้อาร์มันเป็นแผนการกระจาย ความหนาแน่นมากเกินไป ฉันจะทำสิ่งนี้ได้อย่างไร

ป้อนคำอธิบายรูปภาพที่นี่


5
คำถาม StackOverflow นี้แสดงตัวเลือกggplot2สองสามตัวสำหรับพล็อตประเภทนี้รวมถึงจุดกระจาย +
joran

คำตอบ:


30

นี่คือสิ่งที่ฉันใช้โดยใช้ฟังก์ชั่นพื้นฐานสำหรับการวาดสิ่งของ:

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

ป้อนคำอธิบายรูปภาพที่นี่

สำหรับการแสดงผลแฟนซีมากขึ้นคุณอาจต้องการที่จะมีลักษณะที่ggplot2stat_density2d()และ ฟังก์ชั่นอื่นที่ฉันชอบคือsmoothScatter():

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

ป้อนคำอธิบายรูปภาพที่นี่


2
คงจะดีถ้าใครสามารถควบคุมโครงร่างของรูปร่างเพื่อรวมควอนไทล์ / เปอร์เซ็นไทล์ / deciles ที่ระบุ (หรือมีคุณ)
Roman Luštrik

น่ากลัวฉันได้รับการมองหาแบบนี้มานานพล็อตที่มีคุณภาพดี
WAF

26

ไม่มีใครแนะนำ ggplot2 สำหรับสิ่งนี้ ??

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

ซึ่งผลิตสิ่งต่อไปนี้:

ตัวอย่างที่ 1

อย่างไรก็ตามสิ่งอื่น ๆ สามารถทำได้เช่นกันค่อนข้างง่ายเช่นต่อไปนี้:

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

ซึ่งผลิตสิ่งต่อไปนี้:

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.