我正在使用一些数据列在VisualStudio WinForms中创建一个图表,我想为其中一些放置标签。主要问题是未显示第一列和最后一列的标签。图表的最小值和最大值是固定的,数据点可以是最小值和最大值。
例如,我使用 series [0] .ChartType =“Column”创建了一个图表,并通过设置 series [0] .Label 属性来指定标签以显示X, Y,索引和一些文本字符串,也设置 series [0] .LabelBackColor 和 series [0] .LabelBorderColor 来制作一个框。
这就是我得到的:
文本在背景框之外,标签重叠边框但AxisY(在左侧)仍然可见;并且根本没有显示x = 0和x = 10的标签!同样使用Column类型,下面写的所有opertaions都没有效果。
实际上我需要StackedColumn类型,所以:然后我将类型改为 series [0] .ChartType =“StackedColumn”并得到了这个:
盒子更大但仍然与AxisY线和顶部的数字重叠,但仍然没有第一个和最后一个标签。
我试着设置 series [0] .SmartLabelStyle.IsOverlappingHidden = false 并得到了这个:
AxisX和AxisY线和标记显示在标签上方。那不好。
然后我尝试通过设置: series [0] .SmartLabelStyle.Enabled = false 来禁用 SmartLabelStyle 并得到:
好多了。甚至标签现在都重叠了。
最后我尝试通过启用 SmartLabelStyle 并设置 series [0] .SmartLabelStyle.MovingDirection =“Right | Left”来强制标签移动并得到:
现在标签中的文本正确移动,但背景框不是。如果那个盒子移动得恰到好处就足够了,但事实并非如此。
我没有想法如何在图表的左侧和右侧正确显示DataPoint Labels。
有没有办法为文本和框设置标签位置?如何将标签框设置为适合文本的大小?
我绝对想避免使用chart.Paint方法。
答案 0 :(得分:0)
您是否愿意动态添加注释?这可以在任何chart.Paint方法之前完成:
For Each point As DataPoint In Chart1.Series(0).Points
Dim ann As New RectangleAnnotation
ann.Text = "X=" & point.XValue & vbNewLine & " Y=" & point.YValues(0) &
vbNewLine & "a very long text string"
ann.AnchorDataPoint = point
Chart1.Annotations.Add(ann)
Next