【问题标题】:Microsoft Chart Controls and X-Axis time scale formatMicrosoft 图表控件和 X 轴时间刻度格式
【发布时间】:2011-04-09 15:15:35
【问题描述】:

我的 winforms 应用中有一个 Microsoft 图表控件。

我目前在循环中播放 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 点的类型是什么? DateTime, double, int ... ?
  • x 和 y 的双精度值
  • 我使用如上所示的格式来防止双打尾随。

标签: c# .net winforms mschart


【解决方案1】:

我怀疑LabelStyle.Format 属性的使用方式与string.Format(mySringFormat,objToFormat) 类似。
因此,假设您的底层 X 对象类型是 double,它只会打印一个 冒号分隔 双精度(例如,4321 将是 00:43:21)。

AFAIK,没有一种简单的方法可以像仅使用字符串格式的时间值一样打印double 值。

如果您可以更改填充图表的代码,我建议您将 X 值传递给 DateTime,然后您将能够使用自定义 DateTime 格式,例如

"HH:mm:ss",或others

编辑:

根据您的评论:

// 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";
}

【讨论】:

  • 好的,但我可以问一下我将如何处理 X 值的 DateTime 吗?请
  • @PleaseHelpMe:您是将图表绑定到数据源还是使用 series.Points.AddXY() 添加元素?
  • 使用“....Points.addXY((double)value1,(double)value2)”方法添加我的元素
  • 我必须将值转换为双精度值,这有点说来话长:S
  • 我不断在 xAxis 上获取 DD/MM/YYY 值,而不是时间 HH:MM:SS :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-29
  • 2013-01-04
  • 1970-01-01
  • 2019-10-15
  • 2016-08-31
  • 2021-02-01
相关资源
最近更新 更多