将线段覆盖到圆上

时间:2014-10-08 04:06:09

标签: r function ggplot2 overlay geometry

我希望创建一个圆,然后将一条线段从原点覆盖到圆上的给定点(在此试运行中,我选择将线段结束于(.25,.25))。对于我正在进行的研究,我需要能够生成多个长度和端点的这些线段,所以我希望有一个适合它的代码。这是我到目前为止所拥有的。我最近才开始学习R,所以任何建议都会得到很好的赞赏。

circle<- function(center=c(0,0),r,npoints=1000){
  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))
}

circle1<-circle(c(0,0),.48)
k<-ggplot(circle1,aes(x,y))+geom_line(aes(0,0,.25,.25))
k

1 个答案:

答案 0 :(得分:1)

你问题的标题讽刺地接近答案......使用geom_segment

ggplot(circle1,aes(x,y)) + geom_path() + 
  geom_segment(x = 0, y=0, xend=0.25, yend=0.25)

由于您需要能够在多个长度和端点生成这些线段,然后您应该将这些点放在data.frame而不是手动添加它们:

# dummy data
df <- data.frame(x.from = 0, y.from=0, x.to=0.25, y.to=c(0.25, 0))
# plot
ggplot(circle1,aes(x,y)) + geom_path() + 
  geom_segment(data=df, aes(x=x.from, y=y.from, xend=x.to, yend=y.to))
# depending on how you want to change this plot afterwards, 
# it may make more sense to have the df as the main data instead of the circle
ggplot(df) + 
  geom_path(data=circle1, aes(x,y)) + 
  geom_segment(aes(x=x.from, y=y.from, xend=x.to, yend=y.to))