Как заполнить область узкими параллельными линиями

Я хотел бы использовать что-то вроде функции «полигон», чтобы заполнить область под кривой, но я хочу использовать не цвета, а узкие параллельные линии (лучше, если они будут наклонными).

Это возможно?


person Davide Passaretti    schedule 08.12.2013    source источник


Ответы (2)


Используя аргументы density и angle этого можно добиться в polygon() (т.е. прочитать руководство)

 x=seq(-7,10,length=200)
 y1=dnorm(x,mean=0,sd=1)
 plot(x,y1,type="l",lwd=2,col="red")
 y2=dnorm(x,mean=3,sd=2)
 lines(x,y2,type="l",lwd=2,col="blue")


 polygon(x,pmin(y1,y2), density = 10, angle = -45)

с МИНОРАЛЬНОЙ настройкой (заштрихованная область под двумя кривыми с использованием R)

введите здесь описание изображения

person user1317221_G    schedule 08.12.2013

Непонятно, что вы подразумеваете под узкими параллельными линиями. Но можно заполнить многоугольник набором линий, проведенных под определенным углом, с определенным расстоянием между линиями. Аргумент плотность управляет расстоянием между линиями (количество строк на дюйм), а аргумент угол управляет углом линии. Вот пример, где я хеширую область, определяемую пересечением двух полигонов:

plot(NA,xlim=c(0,1),ylim=c(0,1), xaxs="i",yaxs="i") # Empty plot
a <- curve(x^2-0.25, add = TRUE) # First curve
b <- curve(0.5-x^4, add = TRUE) # Second curve
names(a) <- c('xA','yA')
names(b) <- c('xB','yB')
with(as.list(c(b,a)),{
    id <- yB<=yA
    # b<a area
    polygon(x = c(xB[id], rev(xA[id])),
                    y = c(yB[id], rev(yA[id])), 
                    density=10, angle=60, border=NULL)
    # a>b area
    polygon(x = c(xB[!id], rev(xA[!id])),
                    y = c(yB[!id], rev(yA[!id])), 
                    density=10, angle=30, border=NULL)
})

введите здесь описание изображения

person agstudy    schedule 08.12.2013