gpt4 book ai didi

r - 像网格一样的同心圆,以原点为中心

转载 作者:行者123 更新时间:2023-12-01 21:58:50 30 4
gpt4 key购买 nike

我想在点图中包含一系列同心圆作为网格。目的是让观看者了解图中哪些点具有大致相同的大小。我创建了一个 hack 来做到这一点:

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 限制。最后,我不介意用小文本标签来指示每个圆的半径。

编辑也许这个要求太多了,但我还想要另外两件事。

  1. 轴限制应保持不变(可以通过 ggplot_build 完成)
  2. 这可以与多方面一起使用吗?据我所知,如果我想动态添加圆圈,您需要以某种方式找出各个方面。

最佳答案

enter image description here

set.seed(1)
xy <- data.frame(x=rnorm(100),y=rnorm(100))
rmax = sqrt(max(xy$x)^2+max(xy$y)^2)
theta=seq(from=0,by=.01,to=2*pi)
ncirc=10

dat.circ = do.call(rbind,
lapply(seq_len(ncirc),function(n){
r <- n*rmax/ncirc
data.frame(x=r*sin(theta),y=r*cos(theta),r=round(r,2))
}))

rr <- unique(dat.circ$r)

dat.text=data.frame(x=rr*cos(30),y=rr*sin(30),label=rr)

library(ggplot2)

ggplot(xy,aes(x,y))+
geom_point() +
geom_path(data=dat.circ,alpha=.2,aes(group=factor(r))) +
geom_text(data=dat.text,aes(label=rr),vjust=-1)

关于r - 像网格一样的同心圆,以原点为中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20736330/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com