【问题标题】:Display x-axis label at certain data-points in mschart在 mschart 中的某些数据点处显示 x 轴标签
【发布时间】:2016-09-15 11:22:26
【问题描述】:

我正在尝试绘制一条正态分布曲线(作为 SeriesChartType.Spline),其中选定项目的位置位于该曲线上。我的 x 轴有点乱,所以我想整理一下,但我想不出办法在特定位置显示轴标签。

我想显示 {x(0), x(mean), x(n)} 处的值以及曲线上所选项目数据点的 x 轴值。

我试过玩

.ChartAreas(0).AxisX.Interval 

但我不一定有一个标准的区间范围。

有没有办法只在指定的数据点显示 x 轴标签?

[编辑]:

按照建议,我为此图表实现了几个自定义标签。它们并不完全是我所说的直观使用,但它们最终完成了工作。

'//create x-axis labels
mu = Math.Round(mu, 2, MidpointRounding.AwayFromZero)
bci = Math.Round(CDbl(bci), 2, MidpointRounding.AwayFromZero)
Dim muLabel = String.Format("{0}({1})", "µ", mu)

'//Fit axis
With .ChartAreas(0)
    With .AxisX
        .MajorGrid.LineWidth = 0
        .MajorTickMark.Enabled = false
        .Minimum = 0
        With .CustomLabels
            .Add(New CustomLabel(0, 0.4, 0, 0, LabelMarkStyle.LineSideMark))                        '//origin label
            .Add(New CustomLabel(mu-10, mu + 10, muLabel, 0, LabelMarkStyle.LineSideMark))          '//mean label)
            .Add(New CustomLabel(bci-10, bci + 10, bci.ToString, 0, LabelMarkStyle.LineSideMark))   '//index label
        End With
        With .LabelStyle
            .Format = "{0.00}"
            .Font = New Font("Microsoft Sans Serif", 8)
        End With
...

我为标签选择的范围有点随意。我的数据分布不会立即发生太大变化,因此我选择了一个字体看起来合理的范围,因此标签位于中心。现在看起来更具可读性:http://i.imgur.com/7buwdyk.png

【问题讨论】:

    标签: vb.net winforms mschart


    【解决方案1】:

    你可以选择一个

    • 将普通标签替换为CustomLabels。它们有点棘手,因为您无法设置它们的位置。相反,您需要 两个 位置(FromPositionToPosition)来声明 CustomLabel 应居中的范围。请注意,一旦您使用CustomLabels不会显示正常的

    • 或者您可以添加TextAnnotations。您可以将AnchorX 设置为您想要的值,并将Y 位置设置为您的y 值的最小值。正确处理这些也有点棘手,涉及到 AnnotationIsSizeAlwaysRelative 的轴,这应该是错误的。

    • 或者您可以使用ValueToPixelPosition 坐标轴函数对PrePostPaint 事件和Graphics.DrawStringTextRenderer.DrawText 进行编码以获取坐标。这实际上可能是最容易做到的..

    【讨论】:

    • 我终于有时间重新审视这个。我去了自定义标签。感谢您的建议!
    • 自定义标签集合的一些重载 .Add() 有一个 rowIndex 参数。自定义标签可以与默认标签共存。每个自定义标签都有一个 rowindex 属性。如果设置 >0 多个标签行是可能的。 docs.microsoft.com/en-us/dotnet/api/…
    • 是的,但这意味着每种类型都位于单独的行上。但我会更新答案,稍后再提到这一点..
    【解决方案2】:

    您应该可以使用 custom labels (example here) 执行此操作,但可能需要做一些额外的操作来隐藏普通标签 (example here)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多