Deux courbes et des couleurs

mardi 30 juin 2009, par jps29

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

Portfolio

Un message, un commentaire ?

modération a priori

Ce forum est modéré a priori : votre contribution n’apparaîtra qu’après avoir été validée par un administrateur du site.

Qui êtes-vous ?
Votre message