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

圆填充Circle packing算法

曾经开发了大量确定性和随机性的圆填充算法。

  • RepelLayout 通过成对排挤迭代挪动圆圈来搜寻非重叠布局。圆的地位被限度在一个矩形区域内。为防止边缘效应,能够将边界区域视为环面,例如,推到左侧边缘的圆将从新进入右侧边缘的边界区域。这是一种非常简单且效率相当低的算法,但通常会产生良好的后果。
  • ProgressiveLayout 间断搁置圆,使每个圆与先前搁置的两个圆在内部相切。该算法是确定性的,只管能够通过扭转输出圆圈的程序产生不同的布局。它十分高效,因而实用于解决大型数据集。 
  • GraphLayout 试图找到满足输出邻接图的安顿。实现是实验性的。 

第一个例子

咱们将首先创立一组不同大小的圆,而后找到能够用 ggplot 显示的非重叠排列。

首先,咱们创立一组随机圆,位于边界正方形的核心局部,较小的圆比拟大的圆更常见。咱们将圆的大小示意为面积。 

as <- reta(rcs ,5) * maxaa

接下来,咱们尝试找到一个不重叠的排列,容许圆圈占据边界正方形的任何局部。返回值是一个蕴含布局元素和执行迭代次数的列表。

Layout(areass)

布局作为具备圆心坐标和半径的数据框返回。

head( layout )

咱们将其转换为圆形顶点的数据集,用 ggplot 显示。

后果数据集有一个整数 id 字段,它对应于传递给 的原始数据中圆圈的地位。

head(dtg)

当初咱们能够绘制布局了。

themebw() thest(t)ggplot(daa = d.g)

 基于图的圆填充

圆填充的另一种办法是从指定圆的大小和相切(即哪些圆接触哪些其余圆)开始,而后搜寻满足此要求的排列。

在下图中,左侧的图形示意所需的圆相切模式。圆 5、7、8 和 9 是 _外部的_,而其余圆圈是 _内部的_。左边的圆填充显示了合乎输出图的圆圈排列。

切线图和后果沉积

GraphLayout 实现了算法的根本版本。上面的例子产生一个相似于上图的布局:

## 切线列表。矢量元素是圆 ID。##每个向量的第一个元素是一个内圆## 和随后的元素是它的街坊。## 外圆半径。data.frame(id )## Layout 函数用于查找排列##与\`internal\`指定的切线绝对应的圆## 和由 \`external\` 指定的外圆尺寸。后果是一个四列的 data.frame: id, x, y, radi。## circleGraphLayout ## 获取圆顶点的数据 LayotVtics(laout,xyizcs = 2:4, dl = 1)## 绘制带有 ID 正文的圆圈。ggplot() +  geom_olon()+    ge_tet(data=ayo) +    oal()

指定初始圆地位

在后面的示例中,咱们将圆大小的向量传递给 circleRepelLayout,该函数通过将圆搁置在凑近边界区域核心的地位,为圆随机调配起始地位。或者,咱们能够预先指定初始地位。为了阐明这一点,咱们首先将所有圆圈搁置在边界区域的一个角左近。

lLayout(dt.nt)

接下来咱们应用 ggplot 显示初始和最终布局。请留神,在咱们的初始布局中,咱们将圆的大小示意为面积,因而咱们须要在调用Vertices 函数时指定 ,否则它假设大小是半径。

# 获取初始布局的顶点数据,其中大小是区域dgil - ciLocs(dt., sieye = "area")# 获取函数返回的布局的顶点数据 whre# 尺寸是半径a..i <- ciaoees(rlyout)ggplot(data   ge_pgon(couaa=0.3) +     cor_el(xli=lis yl=imts)

挪动和固定

RepelLayout 函数承受一个可选 weights 参数,以在布局算法的每次迭代中对圆的挪动进行额定管制。该参数采纳一个数值向量,其值在 0-1 范畴内(此范畴之外的任何值都将被限度为 0 或 1)。权重为 0 可避免圆齐全挪动,而权重为 1 则容许齐全挪动。

为了阐明这一点,咱们将从更早应用的数据集中抉择几个圆圈,将它们放大并通过将它们的权重设置为 0.0 来固定它们的地位。

# 抉择几个任意的圆圈dai$ea\[las\] <- 2 * axa# 从新生成初始圆的顶点数据,增加一列# 示意一个圆是固定的还是自在的dnta <- cres(dain, ste = "area")dani$sae <- iflse(dtgtd %in% laid, "fixed", "free")# 当初使用权重向量从新运行布局算法以固定地位# 最大的圆res <- cirtt.tdgfal <- circes(es$aut)plot(dta = da,as(x, y, grp=d, fl=ste)) +    gen(coor)

请留神,在初始布局中重叠的固定圆在最终布局中依然重叠。


最受欢迎的见解

1.R语言动态图可视化:如何、创立具备精美动画的图

2.R语言生存剖析可视化剖析

3.Python数据可视化-seaborn Iris鸢尾花数据

4.r语言对布丰投针(蒲丰投针)试验进行模仿和动静

5.R语言生存剖析数据分析可视化案例

6.r语言数据可视化剖析案例:摸索brfss数据数据分析

7.R语言动静可视化:制作历史寰球平均温度的累积动静折线图动画gif视频图

8.R语言高维数据的主成分pca、 t-SNE算法降维与可视化剖析案例报告

9.python主题LDA建模和t-SNE可视化