如何绘制椭圆以可视化 AFL 场
How to plot an ellipse in to visualise an AFL field
我刚刚开始使用 R,因为我对做一些与运动相关的基本可视化很感兴趣,但我一直在尝试绘制一个代表 AFL 场地的椭圆。
我目前已经使用 ggplot2 绘制了场地内的所有地标和线标记,并且正在使用 plotrix 的 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))
我想将椭圆绘制到空白 canvas "field" 上,然后我可以覆盖我已经绘制的其他地标,但目前收到此错误消息:
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))
我想要 "cut" 位于椭圆外侧的弧段,x 轴的两端各有一个。我试过使用
fiftyarcleft[which(fiftyarcleft$x >= oval)]
但是我收到一个错误,指出无法强制对象键入 'double'
我不确定你想要什么尺寸(听起来 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
我刚刚开始使用 R,因为我对做一些与运动相关的基本可视化很感兴趣,但我一直在尝试绘制一个代表 AFL 场地的椭圆。
我目前已经使用 ggplot2 绘制了场地内的所有地标和线标记,并且正在使用 plotrix 的 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))
我想将椭圆绘制到空白 canvas "field" 上,然后我可以覆盖我已经绘制的其他地标,但目前收到此错误消息:
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))
我想要 "cut" 位于椭圆外侧的弧段,x 轴的两端各有一个。我试过使用
fiftyarcleft[which(fiftyarcleft$x >= oval)]
但是我收到一个错误,指出无法强制对象键入 'double'
我不确定你想要什么尺寸(听起来 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