如何绘制椭圆以可视化AFL场

时间:2019-06-02 08:20:13

标签: r ggplot2 visualization ellipse

由于我对进行一些与运动相关的基本可视化感兴趣,所以我才刚开始使用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'

1 个答案:

答案 0 :(得分:0)

我不确定您要使用什么尺寸(听起来AFL尺寸有所不同,但这应该可以在ggplotggforce::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

enter image description here