vb.net – 图表:在X轴上显示更多的值描述
我向用户显示一个图表,该图表有一个图表区域和折线图.在这方面,我得到了一个例子.这一行有大约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”??和“03.01.2013”??上有两个值(6和4).其他系列在“01.01.2013”??,“02.01.2013”??和“03.01.2013”??上有3个值(4,6,5.5).当我只显示它们时,第一个系列将在第二个日期结束,即使有第三个日期的值.我通过在第一个系列中填入一个虚拟值来解决这个问题,日期为“02.01.2013”??,这只是这个时候的平均值(= 5).这一点根本没有用标记项目符号突出显示.这是我绘制我的图形. EDIT2: Skippy’s 后回答和评论,我的新试用.变量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
是的,我同意迈克尔.在这一点我只能补充说明.
通过设置间隔时间: myStripLine1.IntervalOffset = 4 您保证您的X轴值只能在4“通用x轴”值的频率处绘制: 将其设置为1将为每个x轴值提供一个值,该值将作为整数增加(在这种情况下为天数) chart.ChartAreas(0).AxisX.Interval = 1 并声明x轴值以键入: DateTimeIntervalType.Days 'Declaration Public Sub Add( _ labelsStep As Double,_ intervalType As DateTimeIntervalType,_ format As String _ ) End Sub chart.ChartAreas(0).AxisX.IntervalType = DateTimeIntervalType.Days 'which as shown in Michael's answer is parsed to string. Dim format as String = "MM.dd.yyyy" Dim actualDate as Date = Date.ParseExact(yourDate,format) 正如迈克尔在评论中所提到的. mySeries.XValueIndexed = True 将绘制每个索引的X轴值. 如下面的引用所述,提供链接.
http://support2.dundas.com/onlinedocumentation/winchart2005/Data_IndexedXValues.html 我在以下网站提供了有关间隔和间隔偏移的原始信息: http://support2.dundas.com/Default.aspx?article=705 这里讨论数据类型并解决您突出显示的值的问题.
这是设置间隔的一个解释.
我已经添加了这些来源: >供您参考
为了回应ZedGraph,我建议: 并且:查看您的代码后
它没有显示您格式化了日期和日期字符串.还需要考虑到,您没有使用en-US日期格式(我在澳大利亚,所以我们有与您相同的格式).默认日期类型是en-US. 请参考DateTime.ParseExact方法 http://msdn.microsoft.com/en-us/library/system.datetime.parseexact.aspx 我已经从MSDN获取了片段. Dim dateString,format As String Dim result As Date Dim provider As CultureInfo = CultureInfo.InvariantCulture Parse date and time with custom specifier. dateString = "Sun 15 Jun 2008 8:30 AM -06:00" format = "ddd dd MMM yyyy h:mm tt zzz" result = Date.ParseExact(dateString,format,provider) 见链接:
Dim date1 As Date = #3/1/2008 7:00AM# Console.WriteLine(date1.ToString(System.Globalization.CultureInfo.CreateSpecificCulture("fr-FR"))) ' Displays 01/03/2008 07:00:00 请看这个链接: 所以应该去,这样的东西: 'note Imports System.Globalization Dim format as String = "dd.MM.yyyy" Dim actualDate as Date = Date.ParseExact(yourDate,provider) chart.ChartAreas(0).AxisX.LabelStyle.Format ="dd.MM.yyyy" cht_main.ChartAreas(0).AxisX.IntervalType = DateTimeIntervalType.Days cht_main.ChartAreas(0).AxisX.Interval = 1 也: Double.Parse(grade("GRADE") 'grade is not of type double (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |