2016-03-25 1 views
2

Je voudrais colorer/ombrer la zone entre deux intervalles sous une courbe normale, telle que celle produite dans l'exemple. Un intervalle pourrait être 125: 140 ou le segment au-delà de 140.Zone de couleur sous la courbe avec treillis

library(lattice) 

e4a <- seq(60, 170, length = 10000) 
e4b <- dnorm(e4a, 110, 15) 
xyplot(e4b ~ e4a, 
    type = "l", 
    scales = list(x = list(at = seq(60, 170, 5)), rot = 45), 
    panel = function(x, ...){ 
      panel.xyplot(x, ...) 
      panel.abline(v = c(110, 125, 95, 140, 80, 95), lty = 2) 
    }) 

enter image description here

J'ai trouvé une solution vraiment simple pour la R graphic base system, mais je ne trouve pas une solution équivalente pour Lattice.

+1

@ Hack-R C'est la base graphique. –

Répondre

4

panel.polygon existe:

xyplot(e4b ~ e4a, 
     type = "l", 
     scales = list(x = list(at = seq(60, 170, 5)), rot = 45), 
     panel = function(x,y, ...){ 
      panel.xyplot(x,y, ...) 
      panel.abline(v = c(110, 125, 95, 140, 80, 95), lty = 2) 

      xx <- c(125, x[x>=125 & x<=140], 140) 
      yy <- c(0, y[x>=125 & x<=140], 0) 
      panel.polygon(xx,yy, ..., col='red') 
     }) 

Un peu en désordre avec obtenir le polygone correct.

Notez que e4a est trié dans vos données. Si ce n'était pas le cas, vous auriez probablement besoin de les trier avant de présenter à panel.polygon.

enter image description here