由于我对进行一些与运动相关的基本可视化感兴趣,所以我才刚开始使用R,并且我一直试图绘制一个代表AFL领域的椭圆。
我目前已使用ggplot2在该字段内绘制了所有地标和线标记,并正在使用plottrix的draw.ellipse()尝试在该字段周围覆盖椭圆形边界线。我只有字段的尺寸,可以用来找到椭圆的中心点和椭圆的每个臂的半径。
xmin <- 0
xmax <- 17000
ymin <- 0
ymax <- 15000
但是我更希望能够使用ggplot2绘制椭圆,因为我现在对该包更加熟悉。
library(plotrix)
library(ggplot2)
field <- ggplot() + xlim(c(-10,xmax+10)) + ylim(c(-10,ymax+10))
oval <- draw.ellipse(c((xmax/2),(ymax/2)),a = (xmax/2), b = (ymax/2))
我想将椭圆绘制到空白画布“字段”上,然后可以覆盖已经绘制的其他界标,但是当前收到此错误消息:
1: In doTryCatch(return(expr), name, parentenv, handler) :
invalid graphics state
2: In doTryCatch(return(expr), name, parentenv, handler) :
invalid graphics state
创建自己的椭圆函数并使用geom_path()进行绘制会更简单吗?还是我没有足够的信息来绘制一个?
例如,我已经绘制了所有适当的线条标记
library(ggplot2)
library(ggforce)
xmin <- 0
xmax <- 17000
ymin <- 0
ymax <- 15000
fiftyarc_d <- 10000
circleFun <- function(centre=c(0,0),diameter=1,npoints=100){
r = diameter/2
tt <- seq(0,2*pi,length.out = npoints)
xx <- centre[1] + r * cos(tt)
yy <- centre[2] + r * sin(tt)
return(data.frame(x = xx, y = yy))
}
field <- ggplot() + xlim(c(-10,xmax+10)) + ylim(c(-10,ymax+10))
oval <- list(ggforce::geom_ellipse(aes(x0 = xmax/2, y0 = ymax/2,
a = 8000, b = 6000, angle = 0)))
fiftyarcleft <- circleFun(c(xmin,(ymax/2)),fiftyarc_d,npoints=100)
field + oval + geom_path(data=fiftyarcleft,aes(x=x,y=y))
我想“切割”位于椭圆外部的弧段,在x轴的每一端都有一个弧段。我尝试使用
fiftyarcleft[which(fiftyarcleft$x >= oval)]
但是我收到一个错误,提示该对象不能被强制键入'double'
答案 0 :(得分:0)
我不确定您要使用什么尺寸(听起来AFL尺寸有所不同,但这应该可以在ggplot
和ggforce::geom_ellipse
中使用,如下所示:
library(ggplot2)
library(ggforce)
xmin <- 0
xmax <- 17000
ymin <- 0
ymax <- 15000
field <- ggplot() + xlim(c(-10,xmax+10)) + ylim(c(-10,ymax+10))
oval <- list(ggforce::geom_ellipse(aes(x0 = xmax/2, y0 = ymax/2,
a = 8000, b = 6000, angle = 0)))
field + oval