# data
set.seed (123)
xvar <- c(rnorm (1000, 50, 30), rnorm (1000, 40, 10), rnorm (1000, 70, 10))
yvar <- xvar + rnorm (length (xvar), 0, 20)
myd <- data.frame (xvar, yvar)
# density plot for xvar
upperp = 80 # upper cutoff
lowerp = 30 # lower cutoff
x <- myd$xvar
plot(density(x))
dens <- density(x)
x11 <- min(which(dens$x <= lowerp))
x12 <- max(which(dens$x <= lowerp))
x21 <- min(which(dens$x > upperp))
x22 <- max(which(dens$x > upperp))
with(dens, polygon(x = c(x[c(x11, x11:x12, x12)]),
y = c(0, y[x11:x12], 0), col = "green"))
with(dens, polygon(x = c(x[c(x21, x21:x22, x22)]),
y = c(0, y[x21:x22], 0), col = "red"))
abline(v = c(mean(x)), lwd = 2, lty = 2, col = "red")
# density plot with yvar
upperp = 70 # upper cutoff
lowerp = 30 # lower cutoff
x <- myd$yvar
plot(density(x))
dens <- density(x)
x11 <- min(which(dens$x <= lowerp))
x12 <- max(which(dens$x <= lowerp))
x21 <- min(which(dens$x > upperp))
x22 <- max(which(dens$x > upperp))
with(dens, polygon(x = c(x[c(x11, x11:x12, x12)]),
y = c(0, y[x11:x12], 0), col = "green"))
with(dens, polygon(x = c(x[c(x21, x21:x22, x22)]),
y = c(0, y[x21:x22], 0), col = "red"))
abline(v = c(mean(x)), lwd = 2, lty = 2, col = "red")
我需要绘制双向密度的情节,我不知道还有比下面的更好的办法:双向密度图r中结合的一种方式密度图与选定区域
ggplot(myd,aes(x=xvar,y=yvar))+
stat_density2d(aes(fill=..level..), geom="polygon") +
scale_fill_gradient(low="blue", high="green") + theme_bw()
我想将所有三种类型合并为一个(我不知道我是否可以在ggplot中创建双向图),但是解决方案的图形是以ggplot还是base还是混合形式存在并不存在。我希望这是可行的项目,考虑R的鲁棒性。我个人比较喜欢ggplot2。
注:本图中的下遮光是不对的,应该是火红的始终较低,在XVAR和yvar图表绿上,对应于阴影区域中的XY密度图。
编辑:上图(感谢赛斯和Jon非常接近的答案):终极期望 (1)去除空间和轴刻度标签等,使其紧凑
(2)电网的比对,使中间地块蜱和栅格应该与侧蜱和标签对齐,并且情节的大小看起来相同。
这里的答案可能与得到的密度与ggplot http://stackoverflow.com/questions/帮助8545035/scatterplot-with-marginal-histograms-in-ggplot2 – Seth 2012-07-18 18:34:20
您的问题非常鼓舞人心,我想知道您是否可以分享可以在帖子中绘制图形的最终代码?非常感谢。 – 2017-09-22 04:35:54