2017-11-28 2 views
-1

polygon() 함수로 곡선 아래 영역을 채우는 보편적 인 방법이 있습니까?R : Polygon()으로 곡선 아래 영역 채우기

지금까지 내가이 글에서 답을 이해 : Fill under line curve 나는 그것이 좌측 하단에 시작하기 때문에 polygon(c(min(x), x, max(x)), c(min(y), y, min(y))항상 작업, 다시 버튼을 오른쪽 아래로, 곡선까지 진행하고 있다고 가정 할 처음에는.

하지만 항상 작동하지는 않습니다. 때로는이 질문과 같은 그래프를 얻습니다 : Why polygon in R works with a full curve but not with a half curve? 여기서 R은 단순히 선을 그리고 그 아래와 위를 채 웁니다.

그래서 항상 작동 할 iput (또는 다른 함수)는 무엇입니까?

+0

그 질문에 대한 답 문제점은 무엇입니까? 대답은 단순히 입력 데이터를'x '로 정렬하는 것입니다 (즉, x를'x [order (x)]로,'y'를'y [order (y)]'로 대체해야합니다.). 이것이 맞다면 [MRE] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example-aka-mcve-minimal-complete-and-ver)를 입력하십시오. 그렇지 않아. – MichaelChirico

+0

답변에 문제가 없습니다. 나는이 대답을 읽었으며 솔루션에 대한 나의 생각에 나를 인도하는 방식으로 그것을 이해했다는 것을 지적하고 싶었다. 비평가로서의 의미가 아니라 오히려 설명으로 사용되었습니다. 'order()'를 사용하면 값이 증가하면서 데이터가 정렬됩니다 (y 축에서 원하는 것은 아님). 불행히도 재현 가능한 예제를 만들 수 없습니다. 데이터 세트를 업로드 할 수 없으며 임의의 값으로 재현 할 수 없으므로 ... – 00koeffers

+0

미안하지만, 오타를 만들었습니다. 'y [order (x)]' – MichaelChirico

답변

0

아마도 na.rm = TRUEmin(y)일까요? 어쨌든, 여기에 기능을 채울 수있는 수평 경계를 지정하는 당신에게 가능성을주고있다 :

fill_to_border <- function(f, from, to, y_border = 0, col = 1) { 
    curve_points <- curve(f, from, to) 
    polygon_x <- c(min(curve_points$x), curve_points$x, max(curve_points$x)) 
    polygon_y <- c(y_border, curve_points$y, y_border) 
    polygon_points <- list(x = polygon_x, y = polygon_y) 
    polygon(polygon_points, col = col) 
} 

fill(dnorm, -4, 0) 

enter image description here