【问题标题】:Displaying additional label in JavaFX Pie Chart在 JavaFX 饼图中显示附加标签
【发布时间】:2019-09-03 10:08:15
【问题描述】:

我有一个饼图,显示 legends(text)labels(values)。我希望显示一个饼图,该饼图的外部有值,内部有 %。

这是pie chart example

我已按照this post 更改外部标签以显示值而不是文本,但我希望有另一个内部标签显示百分比。

有什么方法可以添加这些标签吗?如果是这样,我该怎么做?我应该使用什么公式来很好地对齐这些标签?

【问题讨论】:

  • 不支持开箱即用 - 由你来实现它:) 最好一步一步来:首先阅读饼图的代码以了解它是如何绘制的,然后在任意位置添加百分比标签每个饼图部分,最后做一些数学运算(类似于绘制外部文本的数学运算)以根据需要定位它。如果遇到具体问题,请将其提取到演示它的minimal reproducible example
  • 嗨,kleopatra,正是因为我无法弄清楚执行此操作的步骤,这就是我发布问题的原因。事实上,我什至尝试获取标签的坐标和饼图的中心以尝试找到中点,但遗憾的是,我为标签获得的坐标似乎不正确,使用边界查找屏幕坐标的方法似乎也没有返回正确的结果。现在我有了饼图中点的坐标,就是这样,我不确定我可以使用什么样的公式来允许我将标签放置在正确的位置。

标签: java javafx label pie-chart


【解决方案1】:

我找到了解决方案,我几乎只是复制了几乎整个“layoutChartChildren()”方法。源代码链接here

你需要注意的主要是以下2行,告诉你放置标签的坐标。

double sliceCenterEdgeX = calcX(labelAngles[index], pieRadius, centerX);
double sliceCenterEdgeY = calcY(labelAngles[index], pieRadius, centerY);

pieRadius 将是距放置标签的圆心的距离。我将包含我复制的提取代码的简短 sn-p,其他方法可以直接从提供的源代码中复制。

double[] labelAngles = new double[getData().size()];
double scale = (total != 0) ? 360 / total : 0;
double start = getStartAngle();

int index = 0;
for (Data d : getData()){
  double size = (isClockwise()) ? (-scale * Math.abs(item.getCurrentPieValue())) : (scale * Math.abs(item.getCurrentPieValue()));
  labelAngles[index] = normalizeAngle(start + (size / 2));
  double sliceX = calcX(labelAngles[index], pieRadius * 0.7, centerX);
  double sliceY = calcY(labelAngles[index], pieRadius * 0.7, centerY);
  //Note: to place it in perfect center:
  //sliceX = sliceX - (text.getBoundsInLocal().getWidth() / 2;
  //sliceY = sliceY - (text.getBoundsInLocal().getHeight() / 2;
  text.relocate(sliceX, sliceY);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多