Microsoft Chart Controls and X-Axis time scale format

后端 未结 1 1315
情书的邮戳
情书的邮戳 2021-01-05 09:08

I have a Microsoft Chart Controls within my winforms app.

I currently play the X and y values within a loop. I also had the X-axis format set as

Char         


        
相关标签:
1条回答
  • 2021-01-05 09:28

    I suspect that LabelStyle.Format property is used in a similar way as in string.Format(mySringFormat,objToFormat).
    Hence, given that your underlying X objects type is double, it will just print a colon-separated double (e.g. 4321 will be 00:43:21).

    AFAIK, there isn't an easy way to print a double value like a time value using just a string format.

    If you can change the code filling the chart, I suggest you to pass DateTime's for the X values, and then you will be able to use custom DateTime formatting, e.g.

    "HH:mm:ss", or others

    EDIT:

    As per your comment:

    // 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);
    

    EDIT 2:

    Here's a complete example, it should be easy to apply this logic to your code:

    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";
    }
    
    0 讨论(0)
提交回复
热议问题