| ■No86376 (mako さん) に返信 > 例えば下記のような15分おきのデータがあったとします。 > 9 12:00 10 >11 12:15 20 「10」が欠落しているのには、何か意図がありますか?
> あと 9:00 9:30 10:00 11:30 12:00 も表示。 09:15 と 09:45 と 10:00 と 12:00 のデータがあって、 09:00 と 09:30 と 11:30 のデータの無いデータ系列の場合、 9:00 / 9:30 / 10:00 には一切出力しないのでしょうか。 それとも前後のデータから想定値を出力するのでしょうか。
Dim ds As New DataSet("mako")
Dim tRaw As New DataTable("raw") tRaw.Columns.Add("時刻", GetType(Date)) tRaw.Columns.Add("個数", GetType(Integer)) tRaw.Rows.Add(#1/19/2018 8:45#, 30) tRaw.Rows.Add(#1/19/2018 9:00#, 20) tRaw.Rows.Add(#1/19/2018 9:15#, 20) tRaw.Rows.Add(#1/19/2018 9:30#, 5) tRaw.Rows.Add(#1/19/2018 9:45#, 10) tRaw.Rows.Add(#1/19/2018 10:00#, 15) tRaw.Rows.Add(#1/19/2018 11:15#, 5) tRaw.Rows.Add(#1/19/2018 11:30#, 20) tRaw.Rows.Add(#1/19/2018 11:45#, 5) tRaw.Rows.Add(#1/19/2018 12:00#, 10) tRaw.Rows.Add(#1/19/2018 12:15#, 20) tRaw.AcceptChanges() ds.Tables.Add(tRaw)
Chart1.Titles.Clear() Chart1.ChartAreas.Clear() Chart1.Legends.Clear() Chart1.Series.Clear()
Dim c15 As New ChartArea("15分エリア") Dim c30 As New ChartArea("30分エリア") Dim c60 As New ChartArea("60分エリア") Chart1.ChartAreas.Add(c15) Chart1.ChartAreas.Add(c30) Chart1.ChartAreas.Add(c60) c15.AxisX.Interval = 1.0 c30.AxisX.Interval = 1.0# c60.AxisX.Interval = 1.0R
Dim c15sr1 As New Series("15分系列") With {.ChartArea = c15.Name} Dim c30sr1 As New Series("30分系列") With {.ChartArea = c30.Name} Dim c60sr1 As New Series("60分系列") With {.ChartArea = c60.Name} Chart1.Series.Add(c15sr1) Chart1.Series.Add(c30sr1) Chart1.Series.Add(c60sr1) c15sr1.ChartType = SeriesChartType.Spline c30sr1.ChartType = SeriesChartType.Column c60sr1.ChartType = SeriesChartType.Point
Dim q = tRaw.AsEnumerable() _ .OrderBy(Function(r) r.Field(Of Date)("時刻")) _ .Select(Function(r, RowIndex) New With { Key RowIndex, Key r.Field(Of Date)("時刻").Minute, Key .X = r.Field(Of Date)("時刻").ToString("HH:mm"), Key .Y = r.Field(Of Integer)("個数") }) For Each r In q If r.RowIndex = 0 OrElse r.Minute = 0 Then c15sr1.Points.AddXY(r.X, r.Y) c30sr1.Points.AddXY(r.X, r.Y) c60sr1.Points.AddXY(r.X, r.Y) ElseIf r.Minute = 15 OrElse r.Minute = 45 Then c15sr1.Points.AddXY(r.X, r.Y) ElseIf r.Minute = 30 Then c15sr1.Points.AddXY(r.X, r.Y) c30sr1.Points.AddXY(r.X, r.Y) End If Next |