将图表点标签移动到另一个位置并用箭头连接它们

时间:2016-03-24 00:32:49

标签: c# charts label point

我想在图表中添加26个点,并从a到z标记它们。

如何将标签从原始位置移动到附近位置,以及如何使用箭头或其他符号连接标签和相应的点?演示图表如下所示:

enter image description here

1 个答案:

答案 0 :(得分:1)

'dependency' => array(array("value1", "Value2", "Value3"), '==', 'true'), DataPoint几乎自动放置,你只有很少的选择来影响他们的位置。

Labels但它们只允许您在避免重叠时控制行为。

所以我认为你不得不诉诸Annotations而不是SmartLabels

为了复制你的图片,你需要一个LineAnnotation和一个TextAnnotationLabels你想要标记,锚定到DataPoint ..:

enter image description here

让我们假设您将DataPoint逐个添加到DataPoints

Series S1

现在你需要创建一个int p = S1.Points.AddXY(yourXValue, yourYValue); string s = yourLabelText; DataPoint dp = S1.Points[p]; ,或者确切地说是RectangleAnnotation,它是TextAnnotation的子类,允许背景和创建边框:

TextAnnotation

请注意我如何设置定位(*)以稍微向上和向右移动注释。数字不是像素,而是图表大小的百分比。您需要进行一些实验才能找到您喜欢的值。优点是,当您调整图表大小或缩放图表时,距离将会缩放。

现在我们添加箭头:

RectangleAnnotation ta = new RectangleAnnotation();
ta.AnchorDataPoint = dp;
ta.AnchorOffsetX = 5;     // *
ta.AnchorOffsetY = 3;     // *
ta.AnchorAlignment = ContentAlignment.BottomLeft;
ta.Text = s;
chart1.Annotations.Add(ta);

(**)我将起点稍微偏离LineAnnotation la = new LineAnnotation(); la.SetAnchor(dp); la.AnchorOffsetX = 0.5; // (**) la.AnchorOffsetY = -0.5; // (**) la.StartCap = LineAnchorCapStyle.Arrow; la.Width = ta.AnchorOffsetX - la.AnchorOffsetX; la.Height = - ta.AnchorOffsetY + la.AnchorOffsetY; // (***) chart1.Annotations.Add(la); ,这样箭头就不会与点的圆圈重叠。

(***)请注意,高度需要从该点向上指向,所以它是负的!

您需要微调一些数字..