我正在向用户展示一个图表,其中有一个带有折线图的图表区域。例如,在这一点上,我得到了一条线。这条线有大约 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)
在每个日期,都会为所有系列输入一个新点,但只有那些具有重要价值的点才会突出显示。之间的这些值是数学计算的。
一个例子来解释这一点:我有两个系列,一个在点"01.01.2013"
和上有两个值(6 和 4) "03.01.2013"
。另一个系列在和上有 3 个值 (4,6,5.5 "01.01.2013"
) 。当我只显示它们时,第一个系列将在第二个日期结束,即使第三个日期有一个值。我通过在第一个系列中填充一个虚拟值来解决这个问题,日期只是此时的平均值(=5)。这一点根本不会用标记项目符号突出显示。这就是我绘制图表的方式。"02.01.2013"
"03.01.2013"
"02.01.2013"
编辑2:
在Skippy 的回答和评论之后,我的新审判。变量MainForm.grades
是 aDictionary(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的解决方案