Объедините два разных графика: один по оси X, а другой по оси Y
Я независимо представлял эти два графика, используя R:
#PLOT 1
x<-250:2500
#Hsap. Northern European
a<-dnorm(x,1489,167)
#Hsap. South African
b<-dnorm(x,1472,142)
plot(x,a, type="l", lwd=3, ylim=c(0,1.2*max(a,b,c)), ylab="Probability Density", xlab="Microns")
lines(x,b, type="l", lwd=3, col="Red")
УЧАСТОК 2
#CUSPAL ENAMEL FORMATION TIME
x<-0:800
#Hsap. Northern European
a<-dnorm(x,447,37)
#Hsap. South African
b<-dnorm(x,444,33)
plot(x,a, type="l", lwd=3, ylim=c(0,1.2*max(a,b,c)), ylab="Probability Density", xlab="Days")
lines(x,b, type="l", lwd=3, col="Red")
![enter image description here][2]
Я хотел бы объединить оба с помощью R и получить изображение, подобное показанному ниже. Интересно сказать, что я также хотел бы выделить интервалы +- 1SD, чтобы увидеть перекрывающуюся область на двух графиках.
Какой точный код в R, чтобы добиться успеха моей цели?
ОБНОВИТЬ
Теперь с моими данными я получаю следующую цифру:
Как видите, перекрывающиеся стандартные отклонения не в лучшем месте. Мне бы хотелось, чтобы эти перекрывающиеся области были выше нормальных распределений, размещенных на оси X. Таким образом, я мог ясно видеть их.
Итак, вопрос в том, можете ли вы написать несколько примеров, и таким образом я узнаю, как я могу перемещать эти весы, чтобы избежать этой ситуации?
В моем примере я хотел бы переместиться вверх вправо-нормальные распределения (ось Y).
x1<-30:200
a1<-dnorm(x1,87,15)
b1<-dnorm(x1,89,13)
c1<-dnorm(x1,92,16)
d1<-dnorm(x1,104,15)
x2<-000:1600
a2<-dnorm(x2,724,66)
b2<-dnorm(x2,724,50)
d2<-dnorm(x2,835,117)
scale<-range(pretty(range(a1,a2,b1,b2,c1,d1,d2)))
remap<-function(x, to, from=range(x)) {
(x-from[1]) / (from[2]-from[1]) * (to[2]-to[1]) + to[1]
}
plot(NA, NA, xaxt="n", yaxt="n", type="n", xlim=scale, ylim=scale)
rect(remap(87-15, scale, range(x1)), scale[1],
remap(87+15, scale, range(x1)), scale[2], col="#ff606025", lty=1)
rect(remap(89-13, scale, range(x1)), scale[1],
remap(89+13, scale, range(x1)), scale[2], col="#ff606025", lty=2)
rect(remap(92-16, scale, range(x1)), scale[1],
remap(92+16, scale, range(x1)), scale[2], col="#3dae0025", lty=0)
rect(remap(104-15, scale, range(x1)), scale[1],
remap(104+15, scale, range(x1)), scale[2], col="#005ccd25", lty=0)
rect(scale[1], remap(724-66, scale, range(x2)),
scale[2], remap(724+66, scale, range(x2)), col="#ff606025", lty=1)
rect(scale[1], remap(724-50, scale, range(x2)),
scale[2], remap(724+50, scale, range(x2)), col="#ff606025", lty=2)
rect(scale[1], remap(835-117, scale, range(x2)),
scale[2], remap(835+117, scale, range(x2)), col="#005ccd25", lty=0)
lines(remap(x1,scale), a1, col="darkred", lwd=3)
lines(remap(x1,scale), b1, col="darkred", lwd=3, lty=3)
lines(remap(x1,scale), c1, col="darkgreen", lwd=3)
lines(remap(x1,scale), d1, col="darkblue", lwd=3)
lines(scale[2]-a2, remap(x2,scale), col="darkred", lwd=3)
lines(scale[2]-b2, remap(x2,scale), col="darkred", lwd=3, lty=3)
lines(scale[2]-d2, remap(x2,scale), col="darkblue", lwd=3)
axis(2); axis(3)
axis(1, at=remap(pretty(x1), scale), pretty(x1))
axis(4, at=remap(pretty(x2), scale), pretty(x2))
Спасибо
1 ответ
Хитрость в том, что каждый график может содержать только одну систему координат. Так что нам нужно просто масштабировать все значения в одном и том же диапазоне, а затем мы можем сделать некоторую помадку на оси, чтобы вернуться к правильному масштабу. Вот полное решение
x1<-250:2500
a1<-dnorm(x1,1489,167)
b1<-dnorm(x1,1472,142)
x2<-0:800
a2<-dnorm(x2,447,37)
b2<-dnorm(x2,444,33)
scale<-range(pretty(range(a1,a2,b1,b2)))
remap<-function(x, to, from=range(x)) {
(x-from[1]) / (from[2]-from[1]) * (to[2]-to[1]) + to[1]
}
plot(NA, NA, xaxt="n", yaxt="n", type="n", xlim=scale, ylim=scale, xlab="", ylab="")
rect(remap(1489-167, scale, range(x1)), scale[1],
remap(1489+167, scale, range(x1)), scale[2], col=rgb(0,0,0,.25), lty=0)
rect(remap(1472-142, scale, range(x1)), scale[1],
remap(1472+142, scale, range(x1)), scale[2], col=rgb(1,0,0,.25), lty=0)
rect(scale[1], remap(447-37, scale, range(x2)),
scale[2], remap(447+37, scale, range(x2)), col=rgb(0,0,0,.25), lty=0)
rect(scale[1], remap(444-33, scale, range(x2)),
scale[2], remap(444+33, scale, range(x2)), col=rgb(1,0,0,.25), lty=0)
lines(remap(x1,scale), a1, col="black", lwd=3)
lines(remap(x1,scale), b1, col="red", lwd=3)
lines(scale[2]-a2, remap(x2,scale), col="black", lwd=3)
lines(scale[2]-b2, remap(x2,scale), col="red", lwd=3)
axis(2); axis(3)
axis(1, at=remap(pretty(x1), scale, range(x1)), pretty(x1))
axis(4, at=remap(pretty(x2), scale, range(x2)), pretty(x2))
который производит