簡體   English   中英

在R中創建和分割多邊形

[英]Creating and splitting polygon in R

我正在嘗試創建2個圓,然后將它們分成4個部分,這樣我得到8個扇區,然后我想將每個扇區的值從0-1賦予一個屬性,並根據賦予它的值為圓上色。

因此我有一個向量

    ratio<-c(0.02,0.04,0.67,0.9874,0.134552,0.753,0.9754,0.23460)

其中包含每個扇區的比率,並需要根據這些值將這些屬性與扇區和彩色扇區相關聯。

我已經能夠創建圓形,但是它只是一個多邊形,如何將多邊形分成8個扇區,然后為其賦值? 還是創建一個編號系統來為扇區編號?

我一直在網上搜索一段時間,現在找不到答案。

我已經使用以下代碼創建了多邊形,

   circle1<-0
   circle2=0
   x1=0
   y1=0
   k=0
   y2<-0
   x2<-0
 for(l in 1:2){
  for(j in 1:4){
   for(i in 0:180){
    x1<-c(x1,l*cos(i*0.0087266462599716+k*180*0.0087266462599716))
    y1<-c(y1,l*sin(i*0.0087266462599716+k*180*0.0087266462599716))
   }
  x2<-c(x2,x1,0)
  y2<-c(y2,y1,0)
  x1<-0
  y1<-0
  k=k+1
 }
 circle1<-c(circle1,x2)
 circle2<-c(circle2,y2)
}

 circle3<-cbind(circle1,circle2)
 polymap(circle3,axes=T)

#以下代碼用於創建單獨的多邊形

  polys <- SpatialPolygons(list(
   Polygons(list(Polygon(matrix(c(circle3[1:183,1],
       circle3[1:183,2]), ncol=2))),c[1]),
 Polygons(list(Polygon(matrix(c(circle3[184:366,1],
      circle3[184:366,2]), ncol=2))), c[2]) ))

建議我使用splancs包。

我感謝任何建議。

我已經能夠繪制多邊形,但是仍然不能基於比率矢量為繪制的多邊形着色。 我需要顏色來反映比例。

這有可能使用底數R,

## Get circle points
circs <- function(radii, sectors=4) {
    radii <- sort(radii)
    rads <- seq(0, 2*pi, length=100*length(radii)*sectors)      # sample at these radians
    do.call(rbind, lapply(radii, function(r)                   # points for drawing circles
        data.frame(X=r*cos(rads), Y=r*sin(rads), 
                   sector=rep(1:sectors, each=length(rads)/sectors),
                   theta=rads, radius=r)))
}

## Draw figure
drawCirc <- function(radii, sectors, hues=NULL, densities=NULL, ...) {
    polys <- circs(radii, sectors)
    if (missing(hues)) {
        colors <- colorRampPalette(c("green","yellow","red"))(sectors*length(radii))
    } else 
        colors <- heat.colors(n=sectors*length(radii), alpha=hues)
    plot(polys[,1:2], type="n", ...)     # blank plot
    for (i in seq_along(radii))  {  # add polygons
        for (j in 1:sectors) {
            ind <- (i-1)*length(radii)+j
            color <- colors[ind]
            with(polys[polys$sector==j,],
                 if (i == 1) {
                     polygon(x=c(0, X[radius==radii[i]], 0), y=c(0, Y[radius==radii[i]], 0), 
                             col=color, density=densities[ind])
                 } else
                     polygon(x=c(X[radius==radii[i-1]], rev(X[radius==radii[i]])),
                             y=c(Y[radius==radii[i-1]], rev(Y[radius==radii[i]])), 
                             col=color, density=densities[ind]))
        }
    }
}

## Figures
par(mfrow = c(2,2))

## With no shading by ratio - not run
drawCirc(radii=1:2, sectors=4, main="No ratio")
drawCirc(radii=c(0.1, 0.5, 0.9), sectors=7, main="No Ratio, Varying Radii/Sectors")

## Density/Color by ratio
## ** You would need to make sure the ratio vector is in the proper order **
ratio <- c(0.02,0.04,0.67,0.9874,0.134552,0.753,0.9754,0.23460)
drawCirc(radii=1:2, sectors=4, den=ratio*50, main="Ratio by Density")  # by density
drawCirc(radii=1:2, sectors=4, hues=ratio, main="Ratio by Colors")    # heat map

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM