使用ZedGraph和C#在X轴上绘制日期,在Y轴上绘制时间

在ZedGraph中,我如何在Y轴和日期上绘制时间(如00:00,02:00,04:00等)(如12月4日至11日,13日至4月11日,4月14日 – 11,等等)在X轴上? 条形设置已设置为BarType.Stack

示例代码非常有用。

这是我构建的一个示例。 我不确定你会使用时间格式在Y轴上绘制什么样的数据,除了累积的时间量(例如员工工作的小时数)。

ZedGraph使用XDate格式沿轴的时间,从日期时间转换为双倍。 然而,在堆叠的栏中,我不确定ZedGraph是否可以正确地聚合时间(我无法让它工作)。 因此,在我的示例中,我使用了Y轴的线性类型并更改了格式,使其显示为小时和分钟。

请注意,已设置两个轴的刻度的最小值和最大值。 这在X轴上尤其重要,因为自动设置错误。 我指定的其他一些设置会清除次要标记等。

这是一个示例,显示每天三名员工工作小时数的堆积条形图:

 const int NumberOfBars = 5; GraphPane myPane = zedGraphControl1.GraphPane; myPane.Title.Text = "Employee Hours"; myPane.BarSettings.Type = BarType.Stack; myPane.BarSettings.ClusterScaleWidth = 1D; // X AXIS SETTINGS myPane.XAxis.Title.Text = "Date"; myPane.XAxis.Type = AxisType.Date; myPane.XAxis.Scale.Format = "dd-MMM-yy"; myPane.XAxis.Scale.MajorUnit = DateUnit.Day; myPane.XAxis.Scale.MajorStep = 1; myPane.XAxis.Scale.Min = new XDate(DateTime.Now.AddDays(-NumberOfBars)); myPane.XAxis.Scale.Max = new XDate(DateTime.Now); myPane.XAxis.MajorTic.IsBetweenLabels = true; myPane.XAxis.MinorTic.Size = 0; myPane.XAxis.MajorTic.IsInside = false; myPane.XAxis.MajorTic.IsOutside = true; // Y AXIS SETTINGS myPane.YAxis.Title.Text = "Hours Worked"; myPane.YAxis.Type = AxisType.Linear; myPane.YAxis.Scale.Format = @"00:\0\0"; myPane.YAxis.Scale.Min = 0; myPane.YAxis.Scale.Max = 24; myPane.YAxis.Scale.MajorStep = 1; myPane.YAxis.MinorTic.Size = 0; // Construct some sample data Random r = new Random(); List DatesX = new List(); double[] JohnHours = new double[NumberOfBars]; double[] JoanHours = new double[NumberOfBars]; double[] JaneHours = new double[NumberOfBars]; for (int i = 0; i < NumberOfBars; i++) { DatesX.Add(new XDate(DateTime.Today.AddDays(-i))); JohnHours[i] = r.Next(1, 9); JoanHours[i] = r.Next(1, 9); JaneHours[i] = r.Next(1, 9); } myPane.AddBar("John", DatesX.ToArray(), JohnHours, Color.Red); myPane.AddBar("Joan", DatesX.ToArray(), JoanHours, Color.Blue); myPane.AddBar("Jane", DatesX.ToArray(), JaneHours, Color.Green); 

堆积小时条形图