# 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")
Мне нужно построить график двухсторонней плотности, я не уверен, что есть лучший способ, чем следующее:
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 или mixed. Надеюсь, это выполнимый проект, учитывая надежность R. Я лично предпочитаю ggplot2.
Примечание: нижнее затенение на этом графике неверно, красный всегда должен быть ниже и зеленый верхний в графах xvar и yvar, соответствующий заштрихованной области по графику плотности xy.
Изменить: Окончательное ожидание на графике (спасибо seth и jon за очень близкий ответ)
(1) удаление метки пространства и оси тика и т.д., Чтобы сделать его компактным
(2) выравнивание сеток таким образом, чтобы средние графические тики и сетки соответствовали боковым тикам, а метки и размер участков выглядели одинаково.