折れ線グラフを含む 1 つのグラフ領域を持つユーザーにグラフを表示しています。これで、たとえば1行になりました。この行には約 200 の値があります。これらの値にはすべて説明があります (例:"01.01.2013"
など"05.02.2013"
)。
チャートが表示されると、さらに多くの説明を表示するスペースがあるにもかかわらず、2 つの説明しか表示されません。線は正しく表示されますが、2 つのポイントしか記述されていません。
より多くのスペースを確保するためにテキストを垂直に回転させましたが、これは役に立ちませんでした。より少ない値 (5 または 10) を表示すると、説明が正しく表示されます。
これは実際にどのように見えるかです (記述は実際には文字列であり、日付ではありません)。
ご協力ありがとうございました!
編集:私のコード:
chart.ChartAreas(0).AxisY.Maximum = 6
chart.ChartAreas(0).AxisY.Minimum = 1
chart.ChartAreas(0).AxisX.LabelStyle.Angle = -90
chart.Series.Clear()
chart.ChartAreas(0).AxisY.StripLines.Clear()
Dim myStripLine1 as new StripLine()
myStripLine1.IntervalOffset = 4
chart.ChartAreas(0).AxisY.StripLines.add(myStripLine1)
'now adding all series
chart.Series.Add("Chemie") 'just to take the example in the image above
chart.Series(chart.Series.Count - 1).ChartType = DataVisualization.Charting.SeriesChartType.Line
chart.Series(chart.Series.Count - 1).BorderWidth = 4
'now adding quite much values (on every date, every Serie has a value)
chart.Series(chart.Series.Count - 1).Points.AddXY("01.03.2011", 4.9)
日付ごとに、すべてのシリーズに新しいポイントが入力されますが、重要な値を持つポイントのみが強調表示されます。間の値は数学的に計算されます。
これを説明する 1 つの例: 2 つの系列を取得しました。1 つは点"01.01.2013"
とに 2 つの値 (6 と 4) があり"03.01.2013"
ます。"01.01.2013"
他の系列には、とに 3 つの値 (4,6,5.5) が"02.01.2013"
あり"03.01.2013"
ます。それらを表示すると、3 番目の日付の値があったとしても、最初のシリーズは 2 番目の日付で終了します。最初のシリーズのダミー値を日付で埋めることでこれを解決しましたが、"02.01.2013"
これはこの時点での平均 (=5) です。このポイントは、マーカーの箇条書きで強調表示されません。これが私のグラフの描き方です。
EDIT2:
Skippyの回答とコメントの後、私の新しい試み。変数MainForm.grades
は、Dictionary(Of Integer,Dictionary(Of String, String))
約 150 の成績を含む
Dim subjects As New Dictionary(Of Integer, ArrayList)
Dim allgrades As New ArrayList
For Each grade In MainForm.grades
Dim cD As New Dictionary(Of String, String)
cD.Add("SUBJECTID", grade.Value("SUBJECTID"))
cD.Add("GRADE", grade.Value("GRADE"))
cD.Add("DATE", grade.Value("DATE"))
allgrades.Add(cD)
Next
cht_main.ChartAreas(0).AxisX.IntervalType = DateTimeIntervalType.Days
cht_main.ChartAreas(0).AxisX.LabelStyle.Angle = -90
Dim gradesDateSorter = New gradesDateSorter()
allgrades.Sort(gradesDateSorter)
For Each grade In allgrades
If Not subjects.ContainsKey(Integer.Parse(grade("SUBJECTID"))) Then
subjects.Add(Integer.Parse(grade("SUBJECTID")), New ArrayList)
End If
Dim gradeDict As New Dictionary(Of String, String)
gradeDict.Add("DATE", grade("DATE"))
gradeDict.Add("GRADE", grade("GRADE"))
subjects(Integer.Parse(grade("SUBJECTID"))).Add(gradeDict)
Next
For Each subject In subjects
'adding serie
cht_main.Series.Add(MainForm.subjects(subject.Key)("NAME"))
cht_main.Series(cht_main.Series.Count - 1).ChartType = DataVisualization.Charting.SeriesChartType.Line
cht_main.Series(cht_main.Series.Count - 1).BorderWidth = 4
'cht_main.Series(cht_main.Series.Count - 1).IsXValueIndexed = True
For Each grade In subject.Value
cht_main.Series(cht_main.Series.Count - 1).Points.AddXY(Date.Parse(grade("DATE")), Double.Parse(grade("GRADE")))
Next
Next
最後の 5 行目にコメントしIsXValueIndexed=True
たのは、それをアクティブにすると、チャートに大きな赤いエラー クロスが生成されるためです。
解決
X 軸に間隔を設定するとうまくいきます。
chart.ChartAreas(0).AxisX.Interval = 1
Skippyによるソリューション