WinForms图表控件 - 在刻度线之间显示标签

时间:2016-02-02 08:48:50

标签: c# winforms charts

默认情况下,WinForms Chart control会在刻度线下方显示标签。

有没有办法改变它,以便标签显示在刻度线之间,而不是这个图像:

enter image description here

2 个答案:

答案 0 :(得分:2)

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

"Labeling Axes Using Custom Labels" section of the MSDN documentation更详细地描述了这一点:

  

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

     

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

     

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

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

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

答案 1 :(得分:-1)

常规标签将始终显示DataPoints。但是你可以显示之间的刻度线。

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

enter image description here enter image description here

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

注意:为此,您需要设置 Interval。默认情况下,它设置为0.0,因此您需要将其设置为其他值!大部分版本的1都可以。{/ p>

更难以使用CustomLabels来做同样的事情。对于同样的结果,还有更多的工作要做。不是真的推荐。您可以看到示例here