用ggplot2绘制一个圆

也许这是一个愚蠢的问题,但我找不到在ggplot2的手册也没有“阿姨”谷歌的答案…

如果我有一个中间点和一个直径,如何绘制一个与ggplot2作为附加层的圆? 谢谢你的帮助。

一个更新,更好的选项利用称为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) 

如果目的只是为了注释一个圆,你可以简单地使用几何“path”的注释。 无需创build数据框架或function:

 #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下面的代码谷歌组可能是有用的:

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

哪些产生: 在这里输入图像描述

我希望它能让你开始为你的目的破解自定义的例子。

为了后代的缘故,这里是一个更灵活的圆圈解决scheme,使用注释和geom_ribbon来支持填充,颜色,alpha和大小。

 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。

只是为了完整性: ggforce的包ggforce提供了geom_circle