当前位置: 首页 > news >正文

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();

        }

    }

}

http://www.dtcms.com/a/326684.html

相关文章:

  • 专题:2025人形机器人与服务机器人技术及市场报告|附130+份报告PDF汇总下载
  • TCGA数据集下载工具gdc-client下载慢解决方案
  • mysql参数调优之 innodb_buffer_pool_size和innodb_buffer_pool_instances (三)
  • Java AI生成长篇小说的实用
  • VirtualBox虚拟机网卡配置
  • NR,LTE基于CSI的PMI-RI码本选择
  • 【算法训练营Day23】贪心算法part1
  • nginx高新能web服务器
  • UVM验证—UVM 简述
  • 从0-1搭建webpack的前端工程化项目
  • MySQL杂项
  • OpenBMC中phosphor-dbus-interfaces深度解析:架构、原理与应用实践
  • 安装AI高性能推理框架llama.cpp
  • Untiy_SpriteShape
  • VSCode编辑器常用24款基础插件
  • QT QVersionNumber 比较版本号大小
  • 自主泊车算法
  • OFD一键转PDF格式,支持批量转换!
  • 客户端连接redis,redis如何配置
  • 钓鱼鱼饵制作的方式(红队)
  • 定义短的魔术数字时小心负数的整型提升
  • AIStarter修复macOS 15兼容问题:跨平台AI项目管理新体验
  • 【51单片机数码管循环显示3位数字】2022-10-26
  • Spring Boot文件上传功能实现详解
  • day25-IO
  • gateway进行接口日志打印
  • 刘强东的AI棋局
  • 高并发内存池 内存释放回收(6)
  • 如何生成测试报告
  • 加载模型使用torch_dtype参数来显式指定数据类型