本文档详细描述了 快速标绘图象 类型的特性。 说明了它的目标和特珠事项。 在阅读这些信息之前,可能需要回顾在 XtraCharts 中使用 图象 的基本概念。
本文档由下列小节组成。
快速标绘图象概述
SwiftPlotDiagram 对象被设计用于绘制 SwiftPlotSeriesView 类型的系列。 这种图象类型的主要目标是构造在很短的时间期间内添加点的实时图表,并且/或者构造有大量数据点 (数万个或更多) 的图表。 为了满足这些需求,这种图象类型建立在特殊的优化算法的基础之上,算法的内核尽可能轻量,以便于达到最佳的性能。
注意,对于这种类型的图象和对应的系列视图类型,仍然支持最重要的对二维图表类型可用的功能: 例如多个窗格、辅助轴、财务指标线和回归线。 因此,在大部分方面,这种图象类型类似于 XY-图象 类型。
要学习更多关于快速标绘图的内容,请参阅 快速标绘图。
访问图象
要在设计时刻访问快速标绘图象的选项,则单击图表来选中它。 然后,在 属性 窗口中展开 ChartControl.Diagram 属性。
这个示例展示了如何根据 快速标绘图,创建一个实时图表 (在非常短的时间期间内更新)。
注意,这种系列视图类型与 快速标绘图象 类型相关联,并且为了访问特殊选项,应该把 图象 对象转换为这种类型。
C# | 复制代码 |
---|---|
using System; using System.Windows.Forms; using DevExpress.XtraCharts; // ... const int interval = 20; Random random = new Random(); int TimeInterval = 10; double value1 = 10.0; AxisRange AxisXRange { get { SwiftPlotDiagram diagram = chartControl1.Diagram as SwiftPlotDiagram; if (diagram != null) return diagram.AxisX.Range; return null; } } double CalculateNextValue(double value) { return value + (random.NextDouble() * 10.0 - 5.0); } void UpdateValues() { value1 = CalculateNextValue(value1); } private void timer1_Tick(object sender, EventArgs e) { Series series1 = chartControl1.Series[0]; if (series1 == null) return; DateTime argument = DateTime.Now; SeriesPoint[] pointsToUpdate1 = new SeriesPoint[interval]; for (int i = 0; i < interval; i++) { pointsToUpdate1[i] = new SeriesPoint(argument, value1); argument = argument.AddMilliseconds(1); UpdateValues(); } DateTime minDate = argument.AddSeconds(-TimeInterval); int pointsToRemoveCount = 0; foreach (SeriesPoint point in series1.Points) if (point.DateTimeArgument < minDate) pointsToRemoveCount++; if (pointsToRemoveCount < series1.Points.Count) pointsToRemoveCount--; series1.Points.AddRange(pointsToUpdate1); if (pointsToRemoveCount > 0) { series1.Points.RemoveRange(0, pointsToRemoveCount); } if (AxisXRange != null) { AxisXRange.SetMinMaxValues(minDate, argument); } } |
Visual Basic | 复制代码 |
---|---|
Imports System Imports System.Windows.Forms Imports DevExpress.XtraCharts ' ... Private Const interval As Integer = 20 Private random As New Random() Private TimeInterval As Integer = 10 Private value1 As Double = 10.0 Private ReadOnly Property AxisXRange() As AxisRange Get Dim diagram As SwiftPlotDiagram = TryCast(chartControl1.Diagram, SwiftPlotDiagram) If diagram IsNot Nothing Then Return diagram.AxisX.Range End If Return Nothing End Get End Property Private Function CalculateNextValue(ByVal value As Double) As Double Return value + (random.NextDouble() * 10.0 - 5.0) End Function Private Sub UpdateValues() value1 = CalculateNextValue(value1) End Sub Private Sub timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles timer1.Tick Dim series1 As Series = chartControl1.Series(0) If series1 Is Nothing Then Return End If Dim argument As DateTime = DateTime.Now Dim pointsToUpdate1(interval - 1) As SeriesPoint For i As Integer = 0 To interval - 1 pointsToUpdate1(i) = New SeriesPoint(argument, value1) argument = argument.AddMilliseconds(1) UpdateValues() Next i Dim minDate As DateTime = argument.AddSeconds(-TimeInterval) Dim pointsToRemoveCount As Integer = 0 For Each point As SeriesPoint In series1.Points If point.DateTimeArgument < minDate Then pointsToRemoveCount += 1 End If Next point If pointsToRemoveCount < series1.Points.Count Then pointsToRemoveCount -= 1 End If series1.Points.AddRange(pointsToUpdate1) If pointsToRemoveCount > 0 Then series1.Points.RemoveRange(0, pointsToRemoveCount) End If If AxisXRange IsNot Nothing Then AxisXRange.SetMinMaxValues(minDate, argument) End If End Sub |