[英]colour/fill Delaunay plot similar to this voronoi plot in R
以iris
數據集為例,
我正在嘗試為 Voronoi 和 Delaunay 分區創建圖。
我可以使用 ggplot 和 ggforce 包為 Voronoi PLots 做到這一點
#voronoi plot with filled polygons
ggplot(iris, aes(Sepal.Length, Sepal.Width)) +
geom_voronoi_tile(aes(fill = Petal.Length))
現在我想做一個類似的 plot 但使用 Delaunay 三角剖分,其中三角形也像上面 Voronoi plot 中的多邊形一樣填充,但是,我無法弄清楚如何通過第三個變量填充/着色三角形
# Delaunay triangles
ggplot(iris, aes(Sepal.Length, Sepal.Width)) +
geom_delaunay_tile(aes(fill = Petal.Length))
在 Voronoi 拼貼中,點和拼貼之間存在 1:1 的對應關系,因此可以輕松地 map 對拼貼進行填充。 數據框中的每一行都有自己的圖塊,因此可以指定填充、alpha 等。
在 Delaunay 切片中情況並非如此,數據框中的每一行都描述了一個頂點,因此每個切片需要 3 行數據來描述。 這 3 行有不同的 Petal Length 值,並且行和瓦片之間不是 1:1 的對應關系。
顯而易見的選擇是平均三個頂點的花瓣長度,但 ggforce 似乎沒有以這種方式插值頂點的選項。 但是,我們可以像 ggforce 一樣使用deldir
package 來實現這一點:
library(ggplot2)
library(deldir)
tri <- triang.list(deldir(iris$Sepal.Length, iris$Sepal.Width))
do.call(rbind, lapply(seq_along(tri),
function(x) {
data.frame(Sepal.Length = tri[[x]]$x, Sepal.Width = tri[[x]]$y,
Petal.Length = mean(iris$Petal.Length[tri[[x]]$ptNum]),
tri = x)
})) |>
ggplot(aes(Sepal.Length, Sepal.Width)) +
geom_polygon(aes(fill = Petal.Length, group = tri))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.