微软图表控件和x轴时间尺度格式

本文关键字:时间 格式 控件 微软 | 更新日期: 2023-09-27 17:49:48

我有一个微软图表控件在我的winforms应用程序。

我当前在循环中播放X和y值。我还将x轴的格式设置为

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

这作为时间格式工作得很好,但是我注意到,一旦我的时间值超过60秒(即00:00:60),而不是刻度移动到1分钟(即00:01:00),它会变为61(即00:00:61)直到99,然后再变为一分钟(00:00:99),然后(00:01:00)

有办法解决这个问题吗?

微软图表控件和x轴时间尺度格式

我怀疑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";
}