簡體   English   中英

顏色/填充 Delaunay plot 類似於 R 中的這個 voronoi plot

[英]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.

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