gpt4 book ai didi

r - 将多边形添加到散点图中

转载 作者:行者123 更新时间:2023-12-05 04:08:08 24 4
gpt4 key购买 nike

我有 5 个 x,y 数据簇,我正在使用 Rplotly 绘制。

数据如下:

set.seed(1)
df <- do.call(rbind,lapply(seq(1,20,4),function(i) data.frame(x=rnorm(50,mean=i,sd=1),y=rnorm(50,mean=i,sd=1),cluster=i)))

这是 plotly :

library(plotly)
clusters.plot <- plot_ly(marker=list(size=10),type='scatter',mode="markers",x=~df$x,y=~df$y,color=~df$cluster,data=df) %>% hide_colorbar() %>% layout(xaxis=list(title="X",zeroline=F),yaxis=list(title="Y",zeroline=F))

clusters.plot

enter image description here

现在我在每个集群周围创建多边形:

#helper functions:
library(data.table)
library(grDevices)

splinesPolygon <- function(xy,vertices,k=3, ...)
{
# Assert: xy is an n by 2 matrix with n >= k.
# Wrap k vertices around each end.
n <- dim(xy)[1]
if (k >= 1) {
data <- rbind(xy[(n-k+1):n,], xy, xy[1:k, ])
} else {
data <- xy
}
# Spline the x and y coordinates.
data.spline <- spline(1:(n+2*k), data[,1], n=vertices, ...)
x <- data.spline$x
x1 <- data.spline$y
x2 <- spline(1:(n+2*k), data[,2], n=vertices, ...)$y
# Retain only the middle part.
cbind(x1, x2)[k < x & x <= n+k, ]
}

clustersPolygon <- function(df)
{
dt <- data.table::data.table(df)
hull <- dt[,.SD[chull(x,y)]]
spline.hull <- splinesPolygon(cbind(hull$x,hull$y),100)
return(data.frame(x=spline.hull[,1],y=spline.hull[,2],stringsAsFactors=F))
}

library(dplyr)
polygons.df <- do.call(rbind,lapply(unique(df$cluster),function(l) clustersPolygon(df=dplyr::filter(df,cluster == l)) %>% dplyr::rename(polygon.x=x,polygon.y=y) %>% dplyr::mutate(cluster=l)))

现在我想将它们添加到 clusters.plot

我认为这样可以:

clusters <- unique(df$cluster)
for(l in clusters) clusters.plot <- clusters.plot %>% add_polygons(x=dplyr::filter(polygons.df,cluster == l)$polygon.x,y=dplyr::filter(polygons.df,cluster == l)$polygon.y,line=list(width=2,color="black"),fillcolor='transparent')

但是我收到了这个错误:

Error: Columns `x`, `y` must be length 1 or 250, not 54, 54

250nrow(df)54nrow(dplyr::filter(polygonss.df,cluster == 1))

有什么想法吗?

最佳答案

试试这个:

for(l in clusters) clusters.plot <- clusters.plot %>% 
add_polygons(x=dplyr::filter(polygons.df,cluster == l)$polygon.x,
y=dplyr::filter(polygons.df,cluster == l)$polygon.y,
line=list(width=2,color="black"),
fillcolor='transparent', inherit = FALSE)

enter image description here

关于r - 将多边形添加到散点图中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47934438/

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