簡體   English   中英

如何在R中繪制“甜甜圈”多邊形?

[英]How do I draw a “donut” polygon in R?

我發現了一個類似的問題,但與我所相信的一樣。 我正在嘗試在R的中間畫一個帶孔的圓。

我知道如何使用sampSurf庫繪制一個圓:

radius = 20
sp.dbh = spCircle(radius, centerPoint=c(x=30,y=80), spID='tree.1') 
plot(sp.dbh$spCircle)

但是我想畫一個“外圈”,在這個圓的中間有一個孔。 有沒有辦法做到這一點? 為了清楚起見,圓的外邊緣應為環的內邊緣。 謝謝你的幫助!

這有點丑陋,但是您可以使用基本圖形功能輕松地編寫自己的函數來繪制這種形狀。 我們基本上只是將形狀繪制為兩個(略有重疊)的部分。

ring <- function(x,y,outer,inner, border=NULL, col=NA, lty=par("lty"), N=100, ...) {
    t <- seq(0, pi, length.out=N)
    tx <- seq(0-pi/10, pi+pi/10, length.out=N)
    top <- cbind(c(x+cos(tx)*outer, x-cos(tx)*inner), c(y+sin(tx)*outer, y+sin(tx)*inner))
    bot <- cbind(c(x-cos(tx)*outer, x+cos(tx)*inner), c(y-sin(tx)*outer, y-sin(tx)*inner))
    out <- cbind(c(x+cos(t)*outer,x-cos(t)*outer),  c(y+sin(t)*outer, y-sin(t)*outer))
    inn <- cbind(c(x-cos(t)*inner, x+cos(t)*inner), c(y+sin(t)*inner,  y-sin(t)*inner))
    if (!is.na(col)) {
        polygon(top, border=NA, col = col, ...)
        polygon(bot, border=NA, col = col, ...)
    }
    if(!is.null(border)) {
        lines(out, col=border, lty=lty)
        lines(inn, col=border, lty=lty)
    } else {
        lines(out, lty=lty)
        lines(inn, lty=lty)     
    }
}

#test
plot(0,0, xlim=c(-10,10), ylim=c(-10,10),type="n", asp=1)
ring(1,4,5,2)

在此處輸入圖片說明

暫無
暫無

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

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