Javascript 有没有办法在嵌套饼图中居中放置标签,而不使用幻数作为Amchart v4的半径?

Javascript 有没有办法在嵌套饼图中居中放置标签,而不使用幻数作为Amchart v4的半径?,javascript,amcharts,Javascript,Amcharts,我的问题是:我想找到一种自动的方法来在圆环图单元格中居中放置标签。在我的例子中,每个单元格都包含一个复杂对象数组,我想显示这些对象的数量 见: 通过使用radius,我可以找到这些值: 第一层:-28 第二层:-20 第三层:-10 第四层:-8 我应用它作为一个快速修复,但我不喜欢这个解决方案,因为它是固定的4层(如果我需要添加其他层怎么办?等等…)和使用“魔术数字”是不可管理的 你有更好的解决办法吗 您可以在此处进行测试: 第40行: pieSeries.labels.templat

我的问题是:我想找到一种自动的方法来在圆环图单元格中居中放置标签。在我的例子中,每个单元格都包含一个复杂对象数组,我想显示这些对象的数量

见:

通过使用radius,我可以找到这些值:

  • 第一层:-28
  • 第二层:-20
  • 第三层:-10
  • 第四层:-8
我应用它作为一个快速修复,但我不喜欢这个解决方案,因为它是固定的4层(如果我需要添加其他层怎么办?等等…)和使用“魔术数字”是不可管理的

你有更好的解决办法吗

您可以在此处进行测试:

第40行:

 pieSeries.labels.template.radius = am4core.percent(positionRadiusInPie);
注: 使用这些属性不起作用:“水平中心”、“垂直中心”、“文本对齐”、“对齐”

编辑:对Bhavik Kalariya的回应

这就是我对所有层强制一个半径得到的结果。

您至少可以使用您选择的一个基本常数,通过使用标签的
半径
上的方法来计算您希望添加到图表中的每个系列的值,使用您选择的任何公式。下面是一个基本公式,它为我提供了很好的设置结果,其中
BASE\u INNER\u LABEL\u RADIUS
设置为-45

    pieSeries.labels.template.adapter.add('radius', function(radius, target) {
      var chart = target.baseSprite; //chart stored in baseSprite of the AxisCircularLabel
      var index = chart.series.indexOf(target.dataItem.component); //corresponding series stored in the dataItem's component

      return am4core.percent(BASE_INNER_LABEL_RADIUS / (index + 2)); //Uses singular constant defined elsewhere, which is used in all series
    });
这将根据添加到图表中的系列数进行自我调整。如果系列较少,并且希望使标签更加居中,则可以通过进一步调整使其尽可能坚固

编辑

如果你想更通用,你可以直接通过
target.dataItem.sprites
数组(通常是第一个元素,不过如果你想超级安全的话,你可以循环查找
类名为
“Slice”
的对象)并使用所具有的任何数值属性(如
innerRadius
)计算所需的半径值

    pieSeries.labels.template.adapter.add('radius', function(radius, target) {
      var chart = target.baseSprite; //chart stored in baseSprite of the AxisCircularLabel
      var index = chart.series.indexOf(target.dataItem.component); //corresponding series stored in the dataItem's component
      return -(target.dataItem.sprites[0].innerRadius) / (index + 3); 
    });
当然,您需要相应地调整它