0

我正在用一些数据列在 VisualStudio WinForms 中制作一个图表,我想为其中一些列放置标签。主要问题是没有显示第一列和最后一列的标签。图表的最小值和最大值是固定的,数据点可以是最小值和最大值。

例如,我制作了一个带有series[0].ChartType = "Column"的图表,并通过设置series[0].Label属性来显示 X、Y、index 和一些文本字符串来分配标签,还设置了series[0].LabelBackColorseries[0].LabelBorderColor制作一个盒子。
这就是我得到的: 文本在背景框之外,标签与边框重叠,但 AxisY(左侧)仍然可见;x=0 和 x=10 的标签根本没有显示!同样对于 Column 类型,下面编写的所有操作均无效。 实际上我需要 StackedColumn 类型,所以:然后我将类型更改为series[0].ChartType = "StackedColumn"并得到了这个:
立柱类型



堆积柱
盒子更大,但仍然与 AxisY 线和顶部的数字重叠,并且仍然没有第一个和最后一个标签。

我试图设置series[0].SmartLabelStyle.IsOverlappingHidden = false并得到这个: AxisX 和 AxisY 线和标记显示在标签上方。那不好。 然后我尝试通过设置完全禁用SmartLabelStyleseries[0].SmartLabelStyle.Enabled = false并得到这个: 好不了多少。现在连标签都重叠了。 最后,我尝试通过启用SmartLabelStyle并设置series[0].SmartLabelStyle.MovingDirection = "Right | Left"来强制标签移动并得到以下信息:
没有隐藏重叠的 StackedColumn



关闭了 SmartLabelStyle 的 StackedColumn



StackedColumn 与 MovingDirection
现在标签中的文本已正确移动,但背景框未正确移动。如果那个盒子也能正确移动就足够了,但事实并非如此。我不知道如何使数据点标签正确显示在图表的左侧和右侧。
有没有办法为它的文本和框设置标签位置?如何将标签框设置为适合文本的大小?
我绝对想避免使用 chart.Paint 方法。

4

1 回答 1

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

这显示了结果图表

于 2017-08-03T08:48:40.210 回答