我使用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";
有没有内置功能可以做到这一点?
答案 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;
}