使用System.Windows.Forms.DataVisualization.Charting库,折线图点标签的定位非常糟糕。
默认情况下,标签有时位于线上而不是上方或下方。
如果在系列
上设置了SmartLabelStyleseries.SmartLabelStyle = new SmartLabelStyle()
{
MovingDirection = LabelAlignmentStyles.Top | LabelAlignmentStyles.Bottom,
};
标签不再水平移动,但较高点的标签可放置在下方,而较小点的标签位于上方!
有没有办法明确放置点标签?
答案 0 :(得分:1)
这可以通过图表上的PostPaint事件来完成。 这里有一些文档和教程:https://msdn.microsoft.com/en-us/library/dd456612.aspx
在我的图表的限制范围内工作的有限解决方案,对于遇到此问题的任何人都可能有所帮助。
chart.PostPaint += (sender, args) =>
{
for (var j = 0; j < 2; j++)
{
for (var i = 0; i < args.Chart.Series[j].Points.Count; i++)
{
var point = args.Chart.Series[j].Points[i];
var altPoint = args.Chart.Series[j == 0 ? 1 : 0].Points[i];
var above = point.YValues[0] > altPoint.YValues[0] || (point.YValues[0] == altPoint.YValues[0] && j == 0);
var pos = PointF.Empty;
pos.X =
(float)
args.ChartGraphics.GetPositionFromAxis("ChartArea1", AxisName.X,
point.XValue);
pos.Y =
(float)
args.ChartGraphics.GetPositionFromAxis("ChartArea1", AxisName.Y,
point.YValues[0]);
pos = args.ChartGraphics.GetAbsolutePoint(pos);
pos.Y += (above ? - 20 : 10);
pos.X += -10;
args.ChartGraphics.Graphics.DrawString($"{values[j][i]}%",
new Font(FontFamily.GenericSansSerif, 10),
new SolidBrush(_colorPallette[j]), pos);
}
}
};