也许这是一个愚蠢的问题,但我不能找到答案在 ggplot2手册或“阿姨”谷歌..。
如果我有一个中间点和一个直径,我如何用 ggplot2作为一个附加图层绘制一个圆? 谢谢你的帮助。
嗨,以下来自 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")
产品:
我希望它可以帮助您开始为自己的目的编写定制示例。
一个更新、更好的选项利用了一个名为 Ggforce的扩展包,该扩展包定义了一个显式 geom_circle。
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()
还有这个,
ggplot() + geom_rect(aes(xmin=-1,ymin=-1,xmax=1,ymax=1), fill=NA) + coord_polar()
关键在于,除非使用 geom _ point,否则某些坐标系中的圆通常不是其他坐标系中的圆。您可能希望使用笛卡尔坐标确保纵横比为1。
与 ggplot2 >= 0.9你也可以做
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)))
为了子孙后代的利益,这里有一个更灵活的圆形解决方案,它使用了注释和 geom _ 绶带,支持填充、颜色、 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)