Я показываю диаграмму пользователю, у которого есть одна область диаграммы с линейной диаграммой. На этом я получил, например, одну строчку. Эта строка имеет около 200 значений. Все эти значения имеют описание (например, "01.01.2013"
, "05.02.2013"
и т.д.).
Когда отображается Диаграмма, я могу видеть только два описания, даже если бы было место для гораздо большего количества описаний. Линия отображается правильно, но описаны только две точки.
Я повернул текст по вертикали, чтобы было больше места, но это не помогло. Если я отображаю меньше значений (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)
В каждую дату для всех серий вводится новая точка, но подсвечиваются только те точки, где они имеют важные значения. Эти значения между рассчитываются математически.
Один пример, чтобы объяснить это: я получил две серии, одна имеет два значения (6 и 4) в точках "01.01.2013"
и "03.01.2013"
. Другие серии имеют 3 значения (4,6,5,5) для "01.01.2013"
, "02.01.2013"
и "03.01.2013"
. Когда я просто отображаю их, первая серия заканчивается второй датой, даже если для третьей даты было значение. Я решил это, заполнив фиктивное значение в первой серии датой "02.01.2013"
которая является средней величиной на данный момент (= 5). Эта точка просто не выделяется маркером. Вот как я рисую свой график.
EDIT2:
После ответа и комментария Скиппи моя новая пробная версия. Переменная 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
В пятой последней строке я прокомментировал IsXValueIndexed=True
потому что, когда я его активировал, диаграмма генерировалась с большим красным крестиком ошибок.
РЕШЕНИЕ
Установка интервала на оси X делает свое дело!
chart.ChartAreas(0).AxisX.Interval = 1
Решение от Skippy