我试图弄清楚是否有一种方法可以只使用grid.circle创建的圆圈的一半.
library(grid)
grid.circle(x=.5, y=.5, r=.25,gp=gpar(lwd=10))
Run Code Online (Sandbox Code Playgroud)
我想让上半部分为蓝色,下半部分为白色.
谢谢您的帮助!
使用grid.polygon()
和一些基本的三角函数,你可以定义一个能够做到这一点的函数
需要采取一些挑剔的措施,以便在视口为非正方形时填充的半圆不会扭曲.为了以与使用的规则相匹配的方式实现这一点grid.circle()
,我将原点设置为"npc"
单位,将圆半径设置为"snpc"
单位.(有关"npc"
and 的含义的更多信息"snpc"
,请参见?unit
和vignette("grid")
):
library(grid)
filledSemiCircle <- function(x_origin, y_origin, radius, fillcolor, top=TRUE) {
theta <- seq(0, pi, length = 100)
if(!top) theta <- theta + pi ## To fill the bottom instead
x <- unit(x_origin, "npc") + unit(cos(theta) * radius, "snpc")
y <- unit(y_origin, "npc") + unit(sin(theta) * radius, "snpc")
grid.polygon(x, y, gp = gpar(fill = fillcolor))
}
filledSemiCircle(0.5, 0.5, 0.25, "dodgerblue")
filledSemiCircle(0.5, 0.5, 0.25, "gold", top=FALSE)
grid.circle(x = .5, y=.5, r=.25,gp=gpar(lwd=10))
Run Code Online (Sandbox Code Playgroud)