【问题标题】:Smart pie chart label placement algorithms?智能饼图标签放置算法?
【发布时间】:2010-07-29 16:16:41
【问题描述】:

我正在为我的公司构建一个自定义图表库。我很难找到/发明一个好的算法来放置图表标签,以便满足以下要求:

  • 标签不应重叠
  • 标签应尽可能靠近相关切片
  • 如果必须将标签从其切片上移开,则最好沿径向向外移动。

要清楚,这在我的书中相当不错:

http://betterdashboards.files.wordpress.com/2009/02/piechartpercentagelabel1a.png

提前致谢!

【问题讨论】:

    标签: c# label pie-chart placement


    【解决方案1】:

    在示例图像中,没有碰撞测试(即标签可能重叠)。因此,算法很简单:

    • 有一条第一条线,它从饼图的一部分中心开始,与饼图中心相反。第一行的长度是固定的。
    • 第二行是水平的(也是固定长度),根据第一行的角度向左或向右,
    • 也根据第一行的角度,跟随左对齐或右对齐的文本。

    您可以在您的应用程序中使用相同的算法,因为它似乎是最和谐的一种。但是,如果您有几个太靠近的饼图部分,文本可能会重叠。

    为避免这种情况,您可以测试碰撞,即。 看看两条水平线是否太靠近,然后改变第一条线的角度(或者可能是两个最近的饼图部分的第一条线的角度),直到水平线够远了。

    【讨论】:

      【解决方案2】:

      我假设您使用的是 MS .net 堆栈。如果是这种情况,而不是重新发明轮子,您可以使用 Microsoft 提供的 MS Charts 库。因此,创建库没有任何问题,但是对于像这样的边缘情况,需要一些时间才能使其完美,而 ms 图表库或多或少稳定并且运行良好。

      http://www.microsoft.com/downloads/details.aspx?FamilyID=130f7986-bf49-4fe5-9ca8-910ae6ea442c&displaylang=en

      它生成的饼图还不错。对于您的标签问题,它有一些称为智能标签的选项,它可以非常整齐地排列标签,没有任何重叠。

      附:在下载中,您将找到所有示例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-28
        • 2013-08-27
        • 2014-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多