答案 0 :(得分:1)
'dependency' => array(array("value1", "Value2", "Value3"), '==', 'true'),
DataPoint
几乎自动放置,你只有很少的选择来影响他们的位置。
有Labels
但它们只允许您在避免重叠时控制行为。
所以我认为你不得不诉诸Annotations而不是SmartLabels
。
为了复制你的图片,你需要一个LineAnnotation和一个TextAnnotation每Labels
你想要标记,锚定到DataPoint
..:
让我们假设您将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);
,这样箭头就不会与点的圆圈重叠。
(***)请注意,高度需要从该点向上指向,所以它是负的!
您需要微调一些数字..