自动格式化日期时间轴用于MS图表控制?

时间:2014-06-16 02:35:10

标签: c# .net charts formatting

我使用MS chart control来显示时间序列。随着时间的推移,点会添加到系列中,用户可以使用普通的内置控件放大/缩小。

问题是,如何设置它以便X轴标签自动显示适合所显示时间范围的格式?

例如,当图表上显示的时间范围是< 1小时,我想将其设置为显示HH:mm:ss:

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

但如果我缩小同一图表以显示6天的数据,我希望它只显示日期:

ChartAreas[0].AxisX.LabelStyle.Format ="dd/MM/yy";

有没有内置功能可以做到这一点?

2 个答案:

答案 0 :(得分:2)

您可以挂钩Chart.AxisViewChanged事件(假设您正在使用图表的内置缩放功能),并根据轴范围设置格式:

private void Chart_AxisViewChanged(object sender, ViewEventArgs e)
{
    DateTime range = ChartAreas[0].AxisX.ScaleView.ViewMaximum - ChartAreas[0].AxisX.ScaleView.ViewMinimum;
    if (range > 6 days)
    {
        ChartAreas[0].AxisX.LabelStyle.Format = "dd/MM/yy";
    }
    else
    {
        ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss";
    }
}

当然,您可以使if语句更复杂,以便根据需要处理更多案例。

答案 1 :(得分:0)

通过使用AxisViewChanged事件,您可以抓住用户缩放图表:

更改轴刻度视图位置或大小时发生。

例如,这里有一种实现,其中格式根据缩放级别而变化。非常天真的实现,因为NewSize属性可以是NaN,但它可以为您提供正确的方向

private void chart1_AxisViewChanged(object sender, ViewEventArgs e)
{
    var format = "{0.".PadRight(Convert.ToInt32(3 + e.NewSize), '0') + "}";

    e.Axis.LabelStyle.Format = format;
}