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

Move chart point label to another position and connect them with an arrow

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

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

DataPointLabels 几乎自动放置,您只有很少的选择来影响他们的位置。

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

所以我认为您将不得不求助于 Annotations,而不是 Labels

事实上,要复制您的图像,您需要为每个 DataPoint 标记一个 LineAnnotation and one TextAnnotation,锚定到 DataPoint..:[=​​28=]

假设您要将 DataPoints 一个一个地添加到您的 Series S1 中:

int p = S1.Points.AddXY(yourXValue, yourYValue);
string s = yourLabelText;
DataPoint dp = S1.Points[p];

现在您需要创建一个 TextAnnotation,或者准确地说是 RectangleAnnotation,它是 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);

(**) 我将起点稍微偏离 DataPoint 这样箭头就不会与点的圆重叠。

(***)注意高度需要从点向上,所以是负数!

你会想要微调一些数字..