智能饼图标签放置算法?

时间:2010-07-29 16:16:41

标签: c# label pie-chart placement

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

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

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

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

提前致谢!

2 个答案:

答案 0 :(得分:2)

在样本图像中,没有碰撞测试(即标签可能重叠)。因此,该算法非常简单:

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

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

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

答案 1 :(得分:2)

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

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

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

P.S。在下载中,您将找到所有样本。