SciChart图形库应用
一.概述
1.介绍
SciChart 是一款面向高性能、大数据可视化的专业图表库,广泛应用于金融、医疗、科研、工程等领域。
官网:https://www.scichart.com/
示例代码下载:https://github.com/abtsoftware/scichart.wpf.examples
2.核心技术架构与性能优势
GPU 加速渲染
基于 OpenGL/WebGL(Web)、DirectX(WPF)、Metal(iOS) 等底层图形接口,实现硬件级加速,支持每秒 60 帧下渲染数百万至数十亿数据点,避免传统 CPU 绘图的性能瓶颈。
动态 LOD(细节层级)技术:自动优化渲染细节,确保大数据量下交互流畅不丢点。
高性能计算引擎
SIMD 向量化运算:对大规模数据快速执行数学变换(如傅里叶变换)。
多线程调度:在非 UI 线程处理数据渲染,支持同时加载 50+ 实时图表而不卡顿1。
专有渲染引擎
Visual Xccelerator:由 C++ 编写的跨平台引擎,深度优化内存与 CPU 占用,适用于长时间运行的监控系统(如航天遥测、金融交易)。
3.支持的平台与技术栈
SciChart 提供原生跨平台支持,覆盖主流开发环境:
Web 端:JavaScript/TypeScript(WebGL 加速)
桌面端:
WPF(.NET,支持 DirectX)
Avalonia XPF(Linux/macOS)
移动端:
Android(Kotlin/Java,OpenGL ES)
iOS(Swift,Metal)
综上:
SciChart 主要通过 .NET、JavaScript 和 移动原生 SDK 提供支持,覆盖了主流开发语言和平台。对于其他语言或框架(如QT),可以通过 WebView 或中间层桥接间接使用。
所有平台均无模拟层,直接调用原生图形 API,确保性能最大化。
4.图表类型与功能特性
支持的图表类型
2D 图表:折线图、柱状图、散点图、雷达图、热力图(超声波图)、金融蜡烛图、瀑布图等。
3D 图表:曲面网格、点云、地形图,支持旋转与交互式缩放。
行业专用:石油勘探中的地层图、医疗心电图、金融市场成交量剖面图等。
交互与定制能力
多图联动:支持多个图表同步缩放、平移、十字线(如仪表盘中的实时数据对比)。
丰富交互:拖拽平移、捏合缩放、数据点提示、动态动画(扫描/波浪/渐变动画)。
深度定制:通过 API 调整轴位置(如垂直钻井深度图)、颜色映射、工具提示样式等。
实时数据处理
支持实时流数据更新(如股票行情、传感器数据),在高频更新下保持帧率稳定。
5.许可支持
是否收费:需付费使用
灵活授权:提供开发者授权与企业解决方案,支持长期项目升级。
说明:
官网首次注册,可以免费试用30天。
需要官网下载软件:SciChart-Licensing-Wizard.exe 进行激活
https://www.scichart.com/getting-started/scichart-wpf/
二.WPF下安装
1.使用 NuGet 包管理器(推荐方式)
步骤 1:安装 NuGet 包
在 Visual Studio 的 Package Manager Console 中执行:
# 安装到当前选中的项目
Install-Package SciChart
# 安装到多个项目
Install-Package SciChart -ProjectName Project1, Project2
2.手动全局引用(适用于非 NuGet 场景)
步骤 1:下载并安装 SciChart
从 SciChart 官网 下载安装程序。
运行安装程序,默认会将库文件安装到 C:\Program Files (x86)\SciChart\。
步骤 2:配置全局引用
在项目中手动添加对 SciChart DLL 的引用:
右键点击项目 → 添加 → 引用。
点击 浏览,导航到 SciChart 安装目录(如 C:\Program Files (x86)\SciChart\Lib\net472)。
选择所需的 DLL 文件(如 SciChart.Charting.dll)。
步骤 3:设置复制本地属性
确保引用的 DLL 设置为 复制本地 = True,以便在发布时将文件复制到输出目录。
三.代码示例
1.代码功能:
SciChart 10000点平滑正弦曲线示例,WPF实现
交互功能:缩放、平移、十字线
2.WPF代码:
(1)MainWindow.xaml
<Window x:Class="SciChartExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:s="http://schemas.abtsoftware.co.uk/scichart"
mc:Ignorable="d"
Title="SciChart 10,000点示例" Height="600" Width="800">
<Grid>
<s:SciChartSurface x:Name="sciChartSurface">
<!-- X轴配置 -->
<s:SciChartSurface.XAxis>
<s:NumericAxis AxisTitle="时间 (ms)" TextFormatting="#.0"/>
</s:SciChartSurface.XAxis>
<!-- Y轴配置 -->
<s:SciChartSurface.YAxis>
<s:NumericAxis AxisTitle="振幅" GrowBy="0.1,0.1"/>
</s:SciChartSurface.YAxis>
<!-- 交互控制 -->
<s:SciChartSurface.ChartModifier>
<s:ModifierGroup>
<!-- 鼠标滚轮缩放 -->
<s:MouseWheelZoomModifier/>
<!-- 拖拽平移 -->
<s:ZoomPanModifier/>
<!-- 框选缩放 -->
<s:RubberBandXyZoomModifier/>
<!-- 显示十字线 -->
<s:RolloverModifier ShowTooltipOn="MouseHover"/>
<!-- 图例 -->
<s:LegendModifier ShowLegend="True"/>
</s:ModifierGroup>
</s:SciChartSurface.ChartModifier>
</s:SciChartSurface>
</Grid>
</Window>
(2)MainWindow.xaml.cs
using System;
using System.Windows;
using SciChart.Charting.Model.DataSeries;
using SciChart.Drawing.Common;
namespace SciChartExample
{
public partial class MainWindow : Window
{
// 定义数据点数量
private const int PointCount = 10000;
public MainWindow()
{
InitializeComponent();
Loaded += OnLoaded;
}
private void OnLoaded(object sender, RoutedEventArgs e)
{
// 创建正弦波数据
var dataSeries = new XyDataSeries<double, double>();
// 生成10,000个数据点
for (int i = 0; i < PointCount; i++)
{
double x = i * 0.1; // X值 (时间)
double y = Math.Sin(x); // Y值 (正弦波)
dataSeries.Append(x, y);
}
// 创建渲染系列 (高性能线图)
var renderSeries = new SciChart.Charting.Visuals.RenderableSeries.FastLineRenderableSeries
{
DataSeries = dataSeries,
Stroke = System.Windows.Media.Color.FromArgb(0xFF, 0x47, 0xBD, 0xE6), // 线条颜色
StrokeThickness = 2, // 线宽
AntiAliasing = false // 关闭抗锯齿提高性能
};
// 添加到图表
sciChartSurface.RenderableSeries.Add(renderSeries);
// 自动缩放适配数据
sciChartSurface.ZoomExtents();
}
}
}