gpt4 book ai didi

r - geom_point 精确控制半径而不是缩放它

转载 作者:行者123 更新时间:2023-12-02 06:34:16 25 4
gpt4 key购买 nike

我的数据由一组带半径的圆组成。 x、y 和半径的比例相同。

x    y    radius
0.1 0.8 0.1
0.4 0.4 0.2
0.6 0.2 0.9
0.3 0.6 0.5
0.5 0.5 0.2
...
0.9 0.1 0.1

当我使用时:

myplot <- ggplot() + geom_point(data=df, aes(x=x, y=y, size=(2*radius)))

生成的图是一个气泡图,其大小按半径缩放。我想要一个气泡图,其中 radius of bubble = radius(即气泡的半径采用 native 单位)。

我怎样才能做到这一点(在 ggplot2 中)?

最佳答案

所以事实证明,似乎没有一种简单的方法可以做到这一点。

我检查了 baptiste 链接到的邮件列表条目(这是针对单个圆圈的)并使用 for 循环扩展以一次绘制每个圆圈。

df = data.frame(x=c(0.1,0.4,0.6, 0.3, 0.5,0.9), y=c(0.8,0.4,0.2,0.6,0.5,0.1), r=c(0.1,0.2,0.2,0.1,0.2,0.1))

angle <- seq(-pi, pi, length = 50)

myplot = ggplot()
for (i in 1:length(df$x)) {
df_temp = data.frame(x = df$x[i] + df$r[i]*sin(angle), y = df$y[i] + df$r[i]*cos(angle))
myplot = myplot + geom_polygon(data=df_temp, aes(x=x, y=y), inherit.aes=F)
}
myplot = myplot + geom_point(data=df, aes(x=x, y=y))

这给出:

enter image description here

示例数据集略有变化,使情节更清晰。我还在此处绘制了圆心的坐标。

编辑:建议改进,只绘制一个多边形图层。

circularise <- function(d, n=360){
angle <- seq(-pi, pi, length = n)
make_circle <- function(x,y,r,id){
data.frame(x=x+r*cos(angle), y=y+r*sin(angle), id)
}
lmat <- mapply(make_circle, id = seq_len(nrow(d)),
x = d[,1], y=d[,2], r=d[,3], SIMPLIFY = FALSE)
do.call(rbind, lmat)
}

circles <- circularise(df)

p = ggplot() +
geom_point(data=df, aes(x=x, y=y))

p + geom_polygon(aes(x,y,group=id, fill=id), data=circles) +
coord_fixed()

关于r - geom_point 精确控制半径而不是缩放它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23908147/

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