我正在尝试在两个 SVG 视图之间转换d3.js
。目的是能够在显示之间交替:
- 经典的等值线图(颜色代表测量值的地图)
- 半径与区域人口成比例的气泡图
请参阅此处进行演示。
然而,从任意 SVG 路径过渡到(近似的)圆并不简单。我有以下问题:
- 地图区域可能包含岛屿或飞地;更一般地说,SVG
path
可能包含独立的环。(我原以为d3
会将多多边形渲染为几个path
s 但没有!)另一方面,一个圆仅由一个环组成。在过渡期间如何平滑较小的多边形?(我认为将环合并在一起太复杂了,不值得。)我考虑过淡化或缩小多边形,但在实践中如何实现呢?因为我不确定是否可以在 a 的d
属性中挑出一个环path
。 - 小区域由几个点表示,将这几个点过渡到一个圆上会产生一个顶点太少的多边形,看起来像一个实际的圆(见下图);在 a 的属性中平滑添加点的好策略是什么?
d
path
; - 或者,也可以将直线过渡到 Bézier 曲线,而不是向虚线添加点(4 个点和足够的锚点已经产生了一个非常好的近似圆)。由于我自己的尝试没有说服力,这里是第三个问题:直线和贝塞尔曲线之间如何过渡?
- 最后,在两个方向的过渡开始时,我会在某些(但不是全部)形状中看到尖峰/条纹;知道这可能来自哪里吗?