समोच्च / गर्मी ओवरले के साथ स्कैटरप्लॉट


23

मैंने इस प्लॉट को एक हालिया पेपर के सप्लीमेंट में देखा और मैं इसे आर का उपयोग करके पुन: पेश करने में सक्षम होना पसंद करूंगा। यह एक स्कैल्पलॉट है, लेकिन ओवरप्लोटिंग को ठीक करने के लिए समोच्च लाइनें हैं जो लाल रंग के समान लाल रंग की "गर्मी" हैं। ओवरप्लोटिंग घनत्व। यह मैं कैसे करूंगा?

यहाँ छवि विवरण दर्ज करें


5
यह स्टैकऑवरफ्लो प्रश्न इस तरह के कथानक के लिए ggplot2 विकल्पों में से कुछ को दिखाता है , जिसमें स्कैटरप्लॉट + अंक भी शामिल हैं।
जोरान

जवाबों:


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

यहाँ छवि विवरण दर्ज करें

अधिक फैंसी रेंडरिंग के लिए, आप ggplot2 और पर एक नज़र रखना चाह सकते हैं stat_density2d()। एक और समारोह मुझे पसंद है smoothScatter():

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

यहाँ छवि विवरण दर्ज करें


2
अच्छा होगा यदि कोई निर्दिष्ट क्वांटाइल / प्रतिशत / डिकाइल (या आपके पास क्या है) को शामिल करने के लिए समोच्च साजिश को नियंत्रित कर सकता है।
रोमन लुसट्रिक

Awsesome, मैं लंबे समय से उस तरह की बदबू देख रहा हूँ, अच्छी गुणवत्ता की साजिश
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

जो निम्नलिखित उत्पादन करता है:

यहाँ छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.