简要说明
快速标绘图 是由 SwiftPlotSeriesView 对象来表示的,此对象属于 点和折线系列。
这种视图被设计用于根据轻量级图表生成算法来快速绘制系列。 这种视图主要用于需要显示大量数据点 (数万个或更多) 时,以及/或者创建反映进程的实时图表、并且在很短的时间范围 (例如毫秒) 内被更新 (通过添加新点) 时。 由于使用了特殊的生成算法,这种视图类型易于管理这些任务,并且比任何其他视图有更好的性能。
注意,为了尽可能地提升性能,与其他视图类型相比较,快速标绘图缺少某些元素和可用功能。 在下面列出了这些功能。
- 刻度分隔线;
- 系列点标签;
- 数据点标记;
- 图象旋转功能和轴反转功能;
- 运行时刻的系列点击测试;
- ChartControl.CustomDrawSeriesPoint (WebChartControl.CustomDrawSeriesPoint) 事件。
但是,对于快速标绘图,最重要的功能仍然可用 (例如 窗格、辅助轴、财务指标线和回归线、以及 ChartControl.CustomDrawSeries 事件)。
图表类型特征
尽管快速标绘图属于 点和折线 系列,但是它与该组中的其他视图不兼容,这是因为使用了特殊的 SwiftPlotDiagram 类型。 因此,在单个图表控件中只可以显示快速标绘图系列,但在相同的图表中可以使用多个快速标绘图系列 (在共用的或分开的 窗格 中)。
注意 |
---|
快速标绘图被设计用于主要处理 数值 和 日期时间 数据。 因此,当把 性质 刻度类型指定到系列的 SeriesBase.ArgumentScaleType 属性时,不能保证声明的性能。 更多信息,请参阅 系列的刻度类型。 |
这种系列的一个值得注意的可用选项是 SwiftPlotSeriesView.Antialiasing 属性,它允许启用平滑绘制系列。
下表列出了这种图表类型的主要特征。
特征 |
取值 |
---|---|
系列视图类型 | SwiftPlotSeriesView |
图象类型 | SwiftPlotDiagram |
每个数据点的参数个数 | 1 |
每个数据点的取值个数 | 1 |
示例
这个示例展示了如何根据 快速标绘图,创建一个实时图表 (在非常短的时间期间内更新)。
注意,这种系列视图类型与 快速标绘图象 类型相关联,并且为了访问特殊选项,应该把 图象 对象转换为这种类型。
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 |
Show Me |
---|
在 DevExpress Code Central 数据库中可以找到完整的示例项目,网址是 http://www.devexpress.com/example=E1836。取决于目标平台类型 (ASP.NET、WinForms 等),可以在线运行本示例,或者下载自动可执行的示例。 |