【问题标题】:WinForms Chart control - Show labels between ticksWinForms 图表控件 - 在刻度之间显示标签
【发布时间】:2016-02-02 08:48:49
【问题描述】:

默认情况下,WinForms Chart control 在刻度下方的中心显示标签。

有没有办法改变它,以便标签显示在刻度之间,根据这张图片:

【问题讨论】:

    标签: c# winforms charts


    【解决方案1】:

    我认为这样做的唯一方法是使用自定义标签。这意味着接管从控件添加标签的工作并自己手动完成,这可能适合也可能不适合您的情况。

    "Labeling Axes Using Custom Labels" section of the MSDN documentation 对此进行了更详细的描述:

    使用自定义标签为轴提供自定义文本。自定义标签是 使用 CustomLabels 集合属性实现。如果你使用 自定义标签,图表区域不显示来自数据的轴标签 点。

    使用 CustomLabel 对象时,您必须设置 ToPosition 和 每个 CustomLabel 对象的 FromPosition 属性,以及这些 属性必须指定标签文本区域的宽度。不要 为这两个属性分配相同的值,因为它们 代表一个范围。将自定义标签直接放置在数据下方 点及其关联的刻度线,将 FromPosition 属性设置为 该数据点轴的值减去刻度线的一半 间隔,并将 ToPosition 属性设置为该数据的值 点的轴加上刻度线间隔的一半。例如,如果一个 轴的间隔为 1 (1, 2, 3,…),并且您想使用自定义 X=2 处的标签,然后将 ToPosition 和 FromPosition 属性设置为 分别为 1.5 和 2.5。

    RowIndex 属性指定自定义标签在哪一行 显示。如果在第一个标签行中使用自定义标签,则图表 区域不显示轴刻度的任何标签。唯一的标签 第二行及以后允许的是自定义标签。

    在您的情况下,您不希望标签直接位于刻度线下方,因此在上面引用文本的示例中,您将位置 ToPosition 设置为 2,将 FromPosition 设置为 3。

    查看您的特定图表,如果 x 轴值为 DateTimes,您需要检查 To/From Positions 是否适用于 DateTimes。如果没有,您可能需要将这些值转换为序列号(您可以使用例如DateTime.ToOADate() 来执行此操作),然后再将它们用于 x 轴。这不会影响显示的内容,因为无论如何您都将用自己的标签替换这些标签,然后您可以根据需要对其进行格式化。

    【讨论】:

    • 在上面的示例中,您将位置 ToPosition 设置为 2,将 FromPosition 设置为 3。 显示的图表至少看起来好像数据类型是日期时间。如果是您的代码将无法正常工作。
    • @TaW 抱歉,也许这措辞令人困惑,我的代码指的是您将如何调整引用文本中的示例,而不是 OP 的原始图像。我更新了我的回复以使其更清晰,并添加了 x 轴值为日期时所需内容的大纲。
    • 嗯,这至少更接近一点。实际值总是双倍的,或者已经包含转换后的 ToOADate 数字或 0(如果值是作为字符串添加的)。所以,是的,可以使用这些数字来确定 to- 和 fromValues ,但这会很乏味。我仍然更喜欢我的解决方案;但现在我可以撤回我的反对票了:-)
    【解决方案2】:

    常规标签将始终与数据点一起显示。但是您可以显示它们之间的刻度线。

    根据数据类型和Interval,您可以设置MajorTickMark.IntervalOffset

    chart1.ChartAreas[0].AxisX.MajorTickMark.IntervalOffset =
                         chart1.ChartAreas[0].AxisX.Interval / 2f;
    

    注意:为此,您需要设置Interval。默认设置为0.0,因此您需要将其设置为其他值! 1 的大部分值都可以。

    更难的选择是使用CustomLabels 来实现这一点。同样的结果需要做更多的工作。不是很推荐。可以看一个例子here

    【讨论】:

    • 我认为他想重新定位标签,而不是刻度线。
    • 也许,但正如我所写,这是不可能的。他将不得不为此使用CustomLabels..
    猜你喜欢
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    相关资源
    最近更新 更多