2016-03-25 1 views
2

Я хотел бы покрасить/закрасить область между двумя интервалами под нормальной кривой, такую, как в примере. Интервал может быть 125: 140 или сегмент за 140Цветная область под кривой с решеткой

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

Я нашел очень простое решение для R graphic base system, но я не нашел эквивалентное решение для Lattice.

+1

@ Hack-R Это базовые графики. –

ответ

4

panel.polygon существует:

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') 
     }) 

Немного грязный с получением многоугольник правильный.

Отметьте, что e4a сортируется в ваших данных. Если бы это было не так, вам, скорее всего, придется сортировать их до представления на panel.polygon.

enter image description here