【问题标题】:make edges of donut curvy使甜甜圈的边缘弯曲
【发布时间】:2014-05-15 18:42:19
【问题描述】:

我有donut chart。我想让甜甜圈的边缘弯曲,如图所示。我尝试使用此代码来实现我想要的,但我做不到。

var arc = d3.svg.arc()
        .innerRadius(innerRadius)
        .outerRadius(outerRadius)
        .startAngle(0);

【问题讨论】:

  • 您是否尝试过将生成路径的stroke-linejoin 设置为round
  • @LarsKotthoff 小弧线段是一个封闭的填充区域<path>,而不是一条粗曲线。
  • @TimothyShields 如果您划过路径仍然有效:jsfiddle.net/h9XNz/99
  • @LarsKotthoff 看起来提问者想要在弧的末端半圆,而不是稍微圆角。
  • 无论如何,this question 应该会有所帮助。

标签: javascript d3.js


【解决方案1】:

您可以使用 D3 v3.5 中添加的 d3.svg.arc() 的 cornerRadius 属性

var arc = d3.svg.arc()
    .innerRadius(innerRadius)
    .outerRadius(outerRadius)
    .cornerRadius(outerRadius - innerRadius)
    .startAngle(0);

http://jsfiddle.net/Lxnymj28/1/

【讨论】:

  • cornerRadius 有点问题,我不知道这是因为 d3 还是 SVG 的工作原理。如果您的弧度接近 360 度或类似 1 度,它就会出现故障。
【解决方案2】:

d3.svg.arc() 生成器假定您给它一个datum,而不是列表data。因此,它假设startAngleendAngleinnerRadiusouterRadius 中的每一个都是单个 datum 的常量或函数。

您不能使用此生成器直接使圆弧的末端四舍五入。

但是,您可以在圆弧的端点上绘制两个圆,使用 arc.centroid(startAngle)arc.centroid(endAngle) 作为圆心,(outerRadius-innerRadius)/2 作为半径。这将为您提供圆润的外观。

文档:arc.centroid

【讨论】:

  • 我按照你说的做了检查这个jsfiddle。但我无法过渡到第二个圈子。
  • 您似乎可以毫无问题地为文本设置动画。只需以同样的方式为第二个圆圈设置动画即可。
猜你喜欢
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
相关资源
最近更新 更多