我有一个像这样的数据框,它包含了每个国家的向日葵籽产量,我想在这个数据旁边添加多边形数据,这样我就可以用ggplot2来绘制它。
我被告知使用这个网站:https://observablehq.com/@ladataviz/wip-voronoi-data-generator,我想了解如何创建多边形并绘制圆形Voronoi图。
我以前也创建过类似的post,但这里的问题非常不同,我想找到创建面数据的方法
df <- data.frame(country = c("Ukraine", "Russia", "Argentina", "China", "Romania", "Other"),
prod = c(11.0, 10.6, 3.1, 2.4, 2.1, 15.3))
df
#> country prod
#> 1 Ukraine 11.0
#> 2 Russia 10.6
#> 3 Argentina 3.1
#> 4 China 2.4
#> 5 Romania 2.1
#> 6 Other 15.3
创建于2023年1月20日,使用reprex v2.0.2
如果添加多边形到我的数据应该看起来像这样:
x y path split group value
1 472.0117 220.08122253 0 Ukraine Ukraine 11
2 471.8336 217.18476868 1 Ukraine Ukraine 11
3 471.6556 214.28833008 2 Ukraine Ukraine 11
4 471.4776 211.39187622 3 Ukraine Ukraine 11
5 471.2996 208.49542236 4 Ukraine Ukraine 11
6 471.1216 205.59896851 5 Ukraine Ukraine 11
我希望我的数据看起来像这样。
2条答案
按热度按时间rhfm7lfc1#
在R中创建Voronoi流苏相对容易,但创建Voronoi * 树图 * 就比较难了。链接的Q&A使用
voronoiTreemap
包来完成,它本质上只是一个JavaScript库的 Package 器。据我所知,这是唯一一个发布的生成Voronoi树图的R包。我们有两种选择,一种是从头开始计算多边形,另一种是从
voronoiTreemap
的SVG输出中提取多边形。关于第一个选项,这不是一个小问题。要了解它有多复杂,也要在R中得到一个完整的解决方案,你可以查看this fantastic article by Paul Murrell。代码运行到几页,已经有十多年的历史了,所以我不确定是否所有的依赖关系仍然有效。令人失望的是,没有人把它放在CRAN的一个包中。但也许这有点小众。
如果你对Paul Murrell的方法感到困惑,你只能尝试从
voronoiTreemap
的输出中获取多边形。虽然这个包运行良好,但输出并不适合获取多边形,而且我们无法访问中间计算,从而无法在R中自己生成多边形。这不是不可能的,有几种方法可以解决这个问题。但它们都相当复杂。以下方法首先使用
voronoiTreemap
正常绘制树图,但不使用标签:现在单击
Export -> Save as image
并将绘图另存为Rplot.png
现在我们可以
生成以下多边形数据框:
我们可以看到这是一个Voronoi树图多边形的数据框,通过执行以下操作:
2vuwiymt2#
也许有一个聪明的算法,但这里是你如何可以作出这样一个图表的蛮力。
您的数据
通过优化找到解的函数
调用函数
并绘制它
您可能需要稍微调整优化过程(不同的算法、附加选项)以获得最佳结果(低MSE)。
例如,您可以使用
如果你不喜欢这个特定的解决方案,改变种子,然后再试一次,直到你找到一个让你满意的。
如果您想使用ggplot2,可以执行以下操作