ggplot2에서 산점도 영역 주위에 깔끔한 다각형을 그리는 방법 [닫기]


32

산점도의 점 그룹 주위에 깔끔한 다각형을 어떻게 추가합니까? ggplot2를 사용하고 있지만의 결과에 실망합니다 geom_polygon.

데이터 세트는 탭으로 구분 된 텍스트 파일로 존재 합니다. 아래 그래프는 여러 국가에서 건강과 실업에 대한 두 가지 태도 측정치를 보여줍니다.

밀도를 가진 산점도

나는 geom_density2d덜 공상적이지만 경험적으로 더 정확한 것으로 전환하고 싶습니다 geom_polygon. 정렬되지 않은 데이터의 결과는 도움이되지 않습니다.

여기에 이미지 설명을 입력하십시오

최소-최대 yx 값 주위의 등고선 경로로 동작하는 '순수한'다각형을 어떻게 그리나요? 나는 쓸모없는 데이터 정렬을 시도했다.

암호:

print(fig2 <- ggplot(d, aes(man, eff, colour=issue, fill=issue)) + 
geom_point() + geom_density2d(alpha=.5) + labs(x = "Efficiency", y = "Mandate"))

d객체로 얻을 이 CSV 파일 .

해결책:

그들의 포인터에 대해 Wayne , Andy W 및 다른 사람들에게 감사합니다 ! 데이터, 코드 및 그래프가 GitHub게시 되었습니다 . 결과는 다음과 같습니다.

결과


6
당신이 찾고있는 용어 는 포인트 의 볼록 껍질 (또는 잠재적으로 알파 선체)입니다. 이를 계산하기 위해 R 함수를 찾은 다음 플롯에 레이어로 추가 할 수 있어야합니다.
Andy W

올바른 용어를 지적 해 주셔서 감사합니다! 내가 사용에 실패 ?chullggplot2지금까지. 나는 그것을 올바르게 코딩하고 있는지 확신하지 못하고 누군가가 이미 그것을했기를 바랍니다.
Fr.

질문에 R 코드를 추가 할 수 있습니까?
Yuriy Petrovskiy 2019

주의해야 할 사항 : 표시하는 것은 "최소값"일 수있는 최대 값입니다. R 패키지 alphahull는 볼록 껍질을 찾는 것과 비슷하게 작동하지만 신뢰 간격과 같은 것을 시도하기 위해 안쪽 / 바깥쪽으로 조정할 수 있습니다.
Wayne

@ 웨인, 알파 선체는 신뢰 구간이 아닙니다 (어쨌든 상상할 수있는). 간단한 설명과 알파 선체에 대한 참조는 이 gis.se 질문 을 참조하십시오 . 아마도 이변 량 신뢰 타원, 또는 심지어 백 플롯 (이상 값을 식별하기위한 이변 량 박스 플롯)에 대한 생각 일 것입니다.
Andy W

답변:


33

일부 인터넷 검색을 통해 이미 Gota Morota 웹 사이트를 방문했습니다 . 아래는 데이터로 확장 된 예입니다.

여기에 이미지 설명을 입력하십시오

library(ggplot2)
work <- "E:\\Forum_Post_Stuff\\convex_hull_ggplot2"
setwd(work)

#note you have some missing data
mydata <- read.table(file = "emD71JT5.txt",header = TRUE, fill = TRUE)
nomissing <- na.omit(mydata) #chull function does not work with missing data

#getting the convex hull of each unique point set
df <- nomissing
find_hull <- function(df) df[chull(df$eff, df$man), ]
hulls <- ddply(df, "issue", find_hull)

plot <- ggplot(data = nomissing, aes(x = eff, y = man, colour=issue, fill = issue)) +
geom_point() + 
geom_polygon(data = hulls, alpha = 0.5) +
labs(x = "Efficiency", y = "Mandate")
plot

감사합니다. 코드를 적절히 수정하겠습니다. 불행히도 이미지 파일은 여기에로드되지 않지만 코드가 있습니다.
Fr.

@Fr. , 문제가 정확히 무엇입니까?
Andy W

@AndyW 불행히도, 코드는 결 측값을 지원하지 않으며,이를 조정하는 방법을 찾지 못했습니다.
Fr.

@Fr., 결 측값을 제거하는 것 외에도 결측 데이터 값을 정확히 어떻게 처리 하시겠습니까? 합리적인 대치 기술은 포인트가 비결 측 관측치의 볼록 껍질 안에있게 합니다.
Andy W

@AndyW 나는 함수를 NA죽이는 것을 의미합니다 chull. 나는 그것을 무시할 것으로 기대하지만 그렇게하지 못하고 na.omit()작동 하는 데 사용할 방법을 찾지 못했습니다 . 나는 그것이 가능하다는 것을 확신한다. 나는 이전 솔루션을 능가하는 해커 기술이 없다.
Fr.

8

문제를 이해하면 health및의 볼록 껍질을 찾고있는 것 입니다 unemployment. R에서 이것을 수행하기위한 여러 패키지가있을 수 있습니다 geometry. 점 주위가 순서대로 정렬되어 있다고 생각하지만 확인해야합니다.

편집 : 여기에을 사용하지 않는 예제가 ggplot있지만 유용하기를 바랍니다. chull설명서 의 예제 가 잘못된 것 같습니다.

X <- matrix(rnorm(2000), ncol = 2)
X.chull <- chull (X)
X.chull <- c(X.chull, X.chull[1])
plot (X)
lines (X[X.chull,])

편집 2 : OK, 여기 ggplot2를 사용하는 것이 있습니다. 우리는 설정 Xdata.frame변수 xy. 그때:

library(ggplot2)
X <- as.data.frame(X)
hull <- chull(X)
hull <- c(hull, hull[1])
ggplot(X, aes(x=x, y=y)) + geom_polygon(data=X[hull,], fill="red") + geom_point()

(가) 있습니다 geom_point데이터 (사용하고 X나는 그것을 무시하고있어 동안 ggplot에서) 및 AES를 geom_polygon.

그것을 완전히 얻으려면 두 문제의 선체에 x와 y를 넣고 bar에 세 번째 열 issue을 사용하여 문제 를 구분해야합니다.


볼록 껍질에 대해 수정하십시오. chull볼록 껍질을 생성하는 데 사용하려고했지만로 결과를 사용하지 못했습니다 ggplot2.
Fr.

@Fr .: 답변을 빠르게 편집했습니다. 그것이 당신을 올바른 길로 인도하는지보십시오.
Wayne

자체적으로 어떻게 작동하는지 알 수 있지만으로 마지막 줄을 얻는 방법이 궁금합니다 ggplot2.
Fr.

@Fr .: 좋아, 지금은 어때?
Wayne

효과가 있었다! 감사. 나는 작동 na.omit을 멈추는 NA를 제거하기 위해 추가 해야 chull했습니다. 다시 감사합니다.
Fr.

5

오늘 오후부터 chullR 패키지 안에 함수를 함수로 래핑했습니다 geom_convexhull.

패키지가로드되면 다른 지오메트리로 사용할 수 있습니다.

ggplot(d, aes(man, eff, colour=issue, fill=issue)) + 
  geom_convexhull(alpha=.5) + 
  geom_point() + 
  labs(x = "Efficiency", y = "Mandate"))

패키지는 github에서 사용할 수 있습니다 : https://github.com/cmartin/ggConvexHull


고마워요! 이것을 chull찾을 때까지 그룹화 요소 에 적용하려고 할 때 원하지 않는 결과에 좌절 했습니다.
jogall
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.