原文链接: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.t
dgfal <- 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 可视化