【问题标题】:MSChart DataPoint Label overlappingMSChart 数据点标签重叠
【发布时间】:2017-06-27 10:12:02
【问题描述】:

我正在 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" 来强制标签移动并得到以下信息:

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

【问题讨论】:

    标签: label mschart datapoint


    【解决方案1】:

    您愿意动态添加注释吗?这可以在调用任何 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
    

    This shows the resulting chart

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多