UFO ET IT

ggplot2로 원 그리기

ufoet 2021. 1. 11. 21:11
반응형

ggplot2로 원 그리기


어리석은 질문 일 수도 있지만 ggplot2 핸드북이나 "이모"google에서 답을 찾을 수 없었습니다.

중간 점과 지름이있는 경우 추가 레이어로 ggplot2를 사용하여 원을 어떻게 플로팅합니까? 당신의 도움을 주셔서 감사합니다.


새롭고 더 나은 옵션은 explicity 를 정의하는 ggforce 라는 확장 패키지를 활용합니다 geom_circle.

그러나 후손을 위해 다음은 간단한 원 함수입니다.

circleFun <- function(center = c(0,0),diameter = 1, npoints = 100){
    r = diameter / 2
    tt <- seq(0,2*pi,length.out = npoints)
    xx <- center[1] + r * cos(tt)
    yy <- center[2] + r * sin(tt)
    return(data.frame(x = xx, y = yy))
}

그리고 그것의 사용에 대한 데모 :

dat <- circleFun(c(1,-1),2.3,npoints = 100)
#geom_path will do open circles, geom_polygon will do filled circles
ggplot(dat,aes(x,y)) + geom_path()

여기에 이미지 설명 입력


ggplot2 >= 0.9당신 과 함께 할 수도 있습니다

library(grid)
qplot(1:10, 1:10, geom="blank") +
  annotation_custom(grob=circleGrob(r=unit(1,"npc")), xmin=2, xmax=4, ymin=4, ymax=6)

목적이 원에만 주석을 추가하는 것이라면 단순히 형상 "경로"와 함께 주석을 사용할 수 있습니다. 데이터 프레임이나 함수를 만들 필요가 없습니다.

#g is your plot
#r, xc, yc are the radius and center coordinates

g<-g+annotate("path",
   x=xc+r*cos(seq(0,2*pi,length.out=100)),
   y=yc+r*sin(seq(0,2*pi,length.out=100)))

안녕하세요 ggplot2 Google 그룹 의 다음 코드 가 유용 할 수 있습니다.

dat = data.frame(x=runif(1), y=runif(1))
ggplot() + scale_x_continuous(limits = c(0,1)) +
scale_y_continuous(limits = c(0,1))+
geom_point(aes(x=x, y=y), data=dat, size=50, shape=1, color="gold4")

생성하는 : 여기에 이미지 설명 입력

나는 그것이 당신의 목적에 맞는 커스텀 예제를 해킹하기 시작하기를 바랍니다.


후손을 위해 여기에는 채우기, 색상, 알파 및 크기를 지원하는 주석 및 geom_ribbon을 사용하는보다 유연한 원 솔루션이 있습니다.

gg_circle <- function(r, xc, yc, color="black", fill=NA, ...) {
    x <- xc + r*cos(seq(0, pi, length.out=100))
    ymax <- yc + r*sin(seq(0, pi, length.out=100))
    ymin <- yc + r*sin(seq(0, -pi, length.out=100))
    annotate("ribbon", x=x, ymin=ymin, ymax=ymax, color=color, fill=fill, ...)
}
square <- ggplot(data.frame(x=0:1, y=0:1), aes(x=x, y=y))
square + gg_circle(r=0.25, xc=0.5, yc=0.5)
square + gg_circle(r=0.25, xc=0.5, yc=0.5, color="blue", fill="red", alpha=0.2)

또한 이것을 시도하십시오,

 ggplot() + geom_rect(aes(xmin=-1,ymin=-1,xmax=1,ymax=1), fill=NA) + coord_polar()

요점은 geom_point를 사용하지 않는 한 일부 좌표계의 원이 다른 좌표계의 원이 아닙니다. 데카르트 좌표로 종횡비 1을 보장 할 수 있습니다.


완전성을 위해 : ggforcethomasp85 의 패키지 geom_circle

참조 URL : https://stackoverflow.com/questions/6862742/draw-a-circle-with-ggplot2

반응형