Я хотел бы включить последовательность концентрических кругов в виде сетки в графике точек. Цель состоит в том, чтобы дать зрителю представление о том, какие точки сюжета имеют примерно такую же величину. Я создал хак, чтобы сделать это:Концентрические круги, как сетка, с центром в начале координат
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-пределы таким же образом. Наконец, я бы не возражал против небольших текстовых меток, указывающих радиус каждого круга.
EDIT Возможно, это слишком много, но есть две другие вещи, которые мне бы хотелось.
- Пределы оси должны оставаться тем же (что может быть сделано с помощью ggplot_build)
- это может работать с гранями? Насколько я могу судить, вам нужно каким-то образом выяснить грани, если я хочу динамически добавлять круги.
Кажется ответы предлагают есть способы сделать это :-) Еще интересно если есть способ сделать это, используя полярные координаты. – dpmcsuss