我想在點圖中包含一系列同心圓作爲網格。目標是讓觀衆瞭解劇情中的哪些點具有大致相同的幅度。 我創建了一個黑客做到這一點:同心圓像一個網格,以原點爲中心
add_circle_grid <- function(g,ncirc = 10){
gb <- ggplot_build(g)
xl <- gb$panel$ranges[[1]]$x.range
yl <- gb$panel$ranges[[1]]$y.range
rmax = sqrt(max(xl)^2+max(yl)^2)
theta=seq(from=0,by=.01,to=2*pi)
for(n in 1:ncirc){
r <- n*rmax/ncirc
circle <- data.frame(x=r*sin(theta),y=r*cos(theta))
g<- g+geom_path(data=circle,aes(x=x,y=y),alpha=.2)
}
return(g+xlim(xl)+ylim(yl))
}
xy<-data.frame(x=rnorm(100),y=rnorm(100))
ggplot(xy,aes(x,y))+geom_point()
ggg<-add_circle_grid(ggplot(xy,aes(x,y))+geom_point())
print(ggg)
但我不知道是否有這樣做更ggplot方式。我也考慮過使用極座標,但它不允許我以相同的方式設置x和y極限。 最後,我不介意指示每個圓的半徑的小文本標籤。
編輯 也許這是要求太多,但我還有其他兩件事情。
- 軸界限應該保持不變(這可以通過ggplot_build完成)
- 可以與面這項工作?據我可以告訴你,如果我想動態地添加圓圈,需要以某種方式找出方面。
看來答案建議有辦法做到這一點:-) 仍然不知道如果有使用極座標的方法。 – dpmcsuss