C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■86380 / )  Re[5]: ChartのX軸のタイトル表示
□投稿者/ 魔界の仮面弁士 (1548回)-(2018/01/24(Wed) 10:59:59)
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
返信 編集キー/


管理者用

- Child Tree -