Scatterplot với lớp phủ đường viền / nhiệt


23

Tôi đã thấy cốt truyện này trong phần bổ sung của một bài báo gần đây và tôi rất thích có thể sao chép nó bằng R. Đó là một biểu đồ phân tán, nhưng để khắc phục sự quá mức, có các đường viền có màu "nhiệt" màu xanh lam thành màu đỏ tương ứng với mật độ quá mức. Làm thế nào tôi có thể làm điều này?

nhập mô tả hình ảnh ở đây


5
Câu hỏi StackOverflow này cho thấy một vài tùy chọn ggplot2 cho loại cốt truyện này, bao gồm cả điểm + phân tán.
Joran

Câu trả lời:


30

Đây là của tôi, chỉ sử dụng các chức năng cơ bản để vẽ các công cụ:

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

nhập mô tả hình ảnh ở đây

Để hiển thị lạ mắt hơn, bạn có thể muốn xem ggplot2stat_density2d(). Một chức năng khác tôi thích làsmoothScatter() :

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

nhập mô tả hình ảnh ở đây


2
Sẽ thật tuyệt nếu người ta có thể kiểm soát biểu đồ đường viền để bao gồm các lượng tử / phần trăm / deciles được chỉ định (hoặc những gì có bạn).
Roman Luštrik

Awsgie, tôi đã tìm kiếm smth như thế trong một thời gian dài, cốt truyện chất lượng tốt
WAF

26

Không ai đã đề nghị ggplot2 cho điều này ??

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

Mà sản xuất như sau:

ví dụ 1

Tuy nhiên, những thứ khác cũng có thể được thực hiện, khá dễ dàng, chẳng hạn như sau:

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

Mà sản xuất như sau:

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.