Deux courbes qui se croisent. Le code m’a été proposé par Julien Barnier sur la liste de diffusion des utilisateurs de R.
le code :
# pdf(file = "Naissances Deces19141939.pdf",
# width=8, height=5)
library(spatstat)
library("gtools")
library("gdata")
demographie<-read.xls("demographieFP.xls",sheet=5, row.names=1)
attach(demographie)
demographie
Date<-row.names(demographie)
Date
par(mfrow=c(1,1))
xrange <- 1:26
xrange
x0 <- xrange[-length(xrange)]
x1 <- xrange[-1]
y1 <- Naissances
y2 <- Deces
win <- owin(range(xrange), range(c(y1,y2)))
seg1 <- psp(x0, y1[-length(y1)], x1, y1[-1], window=win)
seg2 <- psp(x0, y2[-length(y2)], x1, y2[-1], window=win)
cross <- crossing.psp(seg1,seg2)
plot(xrange,y1, type="l", col=1,lwd=3,
xaxt="n",
xlab="",ylab="",cex.axis = 0.6)
grid()
abline(v = c(1:26), col = "grey", lty = 3)
lines(y2, col=2, lwd=3)
plot(cross, add=TRUE, col="green")
axis(1, at = 1:length(Naissances), labels = Date, cex.axis = 0.6)
for (i in seq(1:(cross$n+1))) {
cx <- c(min(xrange),cross$x,max(xrange))
cy <- c(y1[1],cross$y,y1[length(y1)])
pxrange <- ceiling(cx[i]):floor(cx[i+1])
py1 <- y1[pxrange]
py2 <- y2[pxrange]
if (py1[1] > py2[1]) couleur <- "pink"
else couleur <- "grey"
polygon(c(cx[i], pxrange, cx[i+1], rev(pxrange)), c(cy[i], py1, cy[i+1], rev(py2)),
col = couleur, border = NA)
}
legend("topright", legend = c("Naissances", "Décès"),
col = c(1, 2), # couleur des lignes
lty = 1,
lwd = 2,
bty != "n",
cex = 0.7,
bg = "white",
)
dev.off()
