微软图表控件和X轴时间刻度格式

8

我在我的winforms应用程序中使用了Microsoft Chart Controls。

目前,我通过循环播放X和y值。我还将X轴格式设置为

ChartAreas[0].AxisX.LabelStyle.Format={"00:00:00"}

这种时间格式在时间值低于60秒时工作正常,但是当我的时间值超过60秒(即00:00:60)时,时间刻度并没有上升到1分钟(即00:01:00),而是直接跳到61(即00:00:61),一直到99才到达一分钟(00:00:99),然后才到达(00:01:00)。

请问有什么方法可以解决这个问题吗?


X点的类型是什么?DateTime、double、int……? - digEmAll
x和y的值都为双精度。 - PleaseHelpMe
我使用上述格式来防止双精度数值的尾随。 - PleaseHelpMe
1个回答

12
我怀疑LabelStyle.Format属性的使用方式类似于string.Format(mySringFormat,objToFormat)。因此,假设你的基础X对象类型为double,它将只打印一个以冒号分隔的双精度数值(例如4321将变为00:43:21)。
据我所知,没有一种简单的方法可以仅通过字符串格式打印出double值,就像时间值一样。
如果您可以更改填充图表的代码,我建议您传递DateTime的X值,然后您将能够使用自定义的DateTime格式,例如: "HH:mm:ss",或其他格式 编辑: 根据您的评论:
// create a base date at the beginning of the method that fills the chart.
// Today is just an example, you can use whatever you want 
// as the date part is hidden using the format = "HH:mm:ss"
DateTime baseDate = DateTime.Today; 

var x = baseDate.AddSeconds((double)value1);
var y = (double)value2;
series.Points.addXY(x, y);

编辑2:

这里有一个完整的示例,将这个逻辑应用到你的代码中应该很容易:

private void PopulateChart()
{
    int elements = 100;

    // creates 100 random X points
    Random r = new Random();
    List<double> xValues = new List<double>();
    double currentX = 0;
    for (int i = 0; i < elements; i++)
    {
        xValues.Add(currentX);
        currentX = currentX + r.Next(1, 100);
    }

    // creates 100 random Y values
    List<double> yValues = new List<double>();
    for (int i = 0; i < elements; i++)
    {
        yValues.Add(r.Next(0, 20));
    }

    // remove all previous series
    chart1.Series.Clear();

    var series = chart1.Series.Add("MySeries");
    series.ChartType = SeriesChartType.Line;
    series.XValueType = ChartValueType.Auto;

    DateTime baseDate = DateTime.Today;
    for (int i = 0; i < xValues.Count; i++)
    {
        var xDate = baseDate.AddSeconds(xValues[i]);
        var yValue = yValues[i];
        series.Points.AddXY(xDate, yValue);
    }

    // show an X label every 3 Minute
    chart1.ChartAreas[0].AxisX.Interval = 3.0;
    chart1.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Minutes;

    chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss";
}

好的,但我可以问一下如何处理DateTime作为X值吗? - PleaseHelpMe
@PleaseHelpMe:您是将图表绑定到数据源还是使用series.Points.AddXY()添加元素? - digEmAll
使用“....Points.addXY((double)value1,(double)value2)”方法添加我的元素。 - PleaseHelpMe
@PleaseHelpMe:请把您用来填写问题中的图表的代码发布出来... :( - digEmAll
你需要使用DateTime.FromOADate()和DateTime.Now.ToOADate()。 - ykatchou
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接