最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

拓端tecdat|R語言圓填充( Circle packing)算法圓堆圖圓形空間填充算法可視化

2022-01-24 15:55 作者:拓端tecdat  | 我要投稿

原文鏈接:http://tecdat.cn/?p=24658?

原文出處:拓端數(shù)據(jù)部落公眾號(hào)

圓填充Circle packing算法

已經(jīng)開發(fā)了大量確定性和隨機(jī)性的圓填充算法。

  • RepelLayout?通過成對(duì)排斥迭代移動(dòng)圓圈來搜索非重疊布局。圓的位置被限制在一個(gè)矩形區(qū)域內(nèi)。為避免邊緣效應(yīng),可以將邊界區(qū)域視為環(huán)面,例如,推到左側(cè)邊緣的圓將重新進(jìn)入右側(cè)邊緣的邊界區(qū)域。這是一種非常簡單且效率相當(dāng)?shù)偷乃惴?,但通常?huì)產(chǎn)生良好的結(jié)果。

  • ProgressiveLayout?連續(xù)放置圓,使每個(gè)圓與先前放置的兩個(gè)圓在外部相切。該算法是確定性的,盡管可以通過改變輸入圓圈的順序產(chǎn)生不同的布局。它非常高效,因此適用于處理大型數(shù)據(jù)集。?

  • GraphLayout?試圖找到滿足輸入鄰接圖的安排。實(shí)現(xiàn)是實(shí)驗(yàn)性的。?

第一個(gè)例子

我們將首先創(chuàng)建一組不同大小的圓,然后找到可以用 ggplot 顯示的非重疊排列。

首先,我們創(chuàng)建一組隨機(jī)圓,位于邊界正方形的中心部分,較小的圓比較大的圓更常見。我們將圓的大小表示為面積。?


  1. as <- reta(rcs ,5) * maxaa

接下來,我們嘗試找到一個(gè)不重疊的排列,允許圓圈占據(jù)邊界正方形的任何部分。返回值是一個(gè)包含布局元素和執(zhí)行迭代次數(shù)的列表。


  1. Layout(areass)


布局作為具有圓心坐標(biāo)和半徑的數(shù)據(jù)框返回。

head( layout )

我們將其轉(zhuǎn)換為圓形頂點(diǎn)的數(shù)據(jù)集,用 ggplot 顯示。

結(jié)果數(shù)據(jù)集有一個(gè)整數(shù)?id?字段,它對(duì)應(yīng)于傳遞給 的原始數(shù)據(jù)中圓圈的位置。


  1. head(dtg)

現(xiàn)在我們可以繪制布局了。


  1. themebw()


  2. thest(t)

  3. ggplot(daa = d.g)

?基于圖的圓填充

圓填充的另一種方法是從指定圓的大小和相切(即哪些圓接觸哪些其他圓)開始,然后搜索滿足此要求的排列。

在下圖中,左側(cè)的圖形表示所需的圓相切模式。圓?5、7、8 和 9 是?內(nèi)部的,而其余圓圈是?外部的。右邊的圓填充顯示了符合輸入圖的圓圈排列。


切線圖和結(jié)果堆積

GraphLayout?實(shí)現(xiàn)了算法的基本版本。下面的例子產(chǎn)生一個(gè)類似于上圖的布局:



  1. ## 切線列表。矢量元素是圓 ID。

  2. ##每個(gè)向量的第一個(gè)元素是一個(gè)內(nèi)圓

  3. ## 和隨后的元素是它的鄰居。



  4. ## 外圓半徑。

  5. data.frame(id )


  6. ## Layout 函數(shù)用于查找排列

  7. ##與`internal`指定的切線相對(duì)應(yīng)的圓

  8. ## 和由 `external` 指定的外圓尺寸。結(jié)果是一個(gè)四列的 data.frame: id, x, y, radi。

  9. ##

  10. circleGraphLayout


  11. ## 獲取圓頂點(diǎn)的數(shù)據(jù)

  12. LayotVtics(laout,xyizcs = 2:4, dl = 1)

  13. ## 繪制帶有 ID 注釋的圓圈。

  14. ggplot() +

  15. geom_olon()+


  16. ge_tet(data=ayo) +


  17. oal()

指定初始圓位置

在前面的示例中,我們將圓大小的向量傳遞給?circleRepelLayout,該函數(shù)通過將圓放置在靠近邊界區(qū)域中心的位置,為圓隨機(jī)分配起始位置?;蛘撸覀兛梢灶A(yù)先指定初始位置。為了說明這一點(diǎn),我們首先將所有圓圈放置在邊界區(qū)域的一個(gè)角附近。



  1. lLayout(dt.nt)


接下來我們使用 ggplot 顯示初始和最終布局。請注意,在我們的初始布局中,我們將圓的大小表示為面積,因此我們需要在調(diào)用Vertices?函數(shù)時(shí)指定?,否則它假定大小是半徑。


  1. # 獲取初始布局的頂點(diǎn)數(shù)據(jù),其中大小是區(qū)域

  2. dgil - ciLocs(dt., sieye = "area")

  3. # 獲取函數(shù)返回的布局的頂點(diǎn)數(shù)據(jù) whre

  4. # 尺寸是半徑

  5. a..i <- ciaoees(rlyout)



  6. ggplot(data

  7. ge_pgon(couaa=0.3) +


  8. cor_el(xli=lis yl=imts)

移動(dòng)和固定

RepelLayout?函數(shù)接受一個(gè)可選?weights?參數(shù),以在布局算法的每次迭代中對(duì)圓的移動(dòng)進(jìn)行額外控制。該參數(shù)采用一個(gè)數(shù)值向量,其值在 0-1 范圍內(nèi)(此范圍之外的任何值都將被限制為 0 或 1)。權(quán)重為 0 可防止圓完全移動(dòng),而權(quán)重為 1 則允許完全移動(dòng)。

為了說明這一點(diǎn),我們將從更早使用的數(shù)據(jù)集中選擇幾個(gè)圓圈,將它們放大并通過將它們的權(quán)重設(shè)置為 0.0 來固定它們的位置。


  1. # 選擇幾個(gè)任意的圓圈


  2. dai$ea[las] <- 2 * axa


  3. # 重新生成初始圓的頂點(diǎn)數(shù)據(jù),添加一列

  4. # 表示一個(gè)圓是固定的還是自由的

  5. dnta <- cres(dain, ste = "area")


  6. dani$sae <- iflse(dtgtd %in% laid, "fixed", "free")


  7. # 現(xiàn)在使用權(quán)重向量重新運(yùn)行布局算法以固定位置

  8. # 最大的圓


  9. res <- cirtt.t


  10. dgfal <- circes(es$aut)



  11. plot(dta = da,as(x, y, grp=d, fl=ste)) +


  12. gen(coor)


請注意,在初始布局中重疊的固定圓在最終布局中仍然重疊。

最受歡迎的見解

1.R語言動(dòng)態(tài)圖可視化:如何、創(chuàng)建具有精美動(dòng)畫的圖

2.R語言生存分析可視化分析

3.Python數(shù)據(jù)可視化-seaborn Iris鳶尾花數(shù)據(jù)

4.r語言對(duì)布豐投針(蒲豐投針)實(shí)驗(yàn)進(jìn)行模擬和動(dòng)態(tài)

5.R語言生存分析數(shù)據(jù)分析可視化案例

6.r語言數(shù)據(jù)可視化分析案例:探索brfss數(shù)據(jù)數(shù)據(jù)分析

7.R語言動(dòng)態(tài)可視化:制作歷史全球平均溫度的累積動(dòng)態(tài)折線圖動(dòng)畫gif視頻圖

8.R語言高維數(shù)據(jù)的主成分pca、 t-SNE算法降維與可視化分析案例報(bào)告

9.python主題LDA建模和t-SNE可視化


拓端tecdat|R語言圓填充( Circle packing)算法圓堆圖圓形空間填充算法可視化的評(píng)論 (共 條)

分享到微博請遵守國家法律
旬阳县| 虎林市| 筠连县| 宣化县| 金堂县| 客服| 亚东县| 榆林市| 类乌齐县| 密云县| 南陵县| 八宿县| 芒康县| 云林县| 南郑县| 前郭尔| 宜君县| 桐柏县| 红河县| 南华县| 大丰市| 新化县| 巧家县| 栖霞市| 昌黎县| 都江堰市| 宣汉县| 沂源县| 慈利县| 江山市| 娄底市| 开鲁县| 深泽县| 西充县| 宣城市| 临安市| 天长市| 东台市| 蓝田县| 穆棱市| 东乌|