values - title in ggplot2 r




Нарисуйте круг с ggplot2 (5)

Может быть, это глупый вопрос, но я не смог найти ответ в справочнике ggplot2 или «тетя» google ...

Как создать круг с ggplot2 в качестве дополнительного слоя, если у меня средняя точка и диаметр? Спасибо за вашу помощь.


Для потомков здесь более гибкое решение круга с использованием аннотата и 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)

Если целью является только аннотация круга, вы можете просто использовать аннотацию с геометрией «путь». Нет необходимости создавать кадр или функцию данных:

#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)))

Также попробуйте это,

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

Суть в том, что круг в некоторой системе координат часто не является кругом в других, если вы не используете geom_point. Возможно, вы захотите обеспечить соотношение сторон 1 с декартовыми координатами.


Только для полноты: пакет ggforce от thomasp85 обеспечивает geom_circle


Более новый, лучший вариант использует пакет расширения, называемый 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()





circle