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

演示:基于WPF的DrawingVisual开发的Chart图表和表格绘制

一、目的:基于WPF的DrawingVisual开发的Chart图表和表格绘制


二、预览

钻井井轨迹表格数据演示示例(应用Table布局,模拟井轨迹深度的绘制)

饼图表格数据演示示例(应用Table布局,模拟多个饼状图组合显示)

柱状图表格数据演示示例(应用Table布局,模拟多个柱状图组合显示)

折线图表格数据演示示例(应用Table布局,模拟曲线图数据显示)

组合图表格数据演示示例 (应用Table布局,模拟散点、气泡图、折线图和柱状图显示)

三、环境


VS2022,NET7

四、主要功能

折线图(支持显示文本,显示点等设置)

按聚类显示 (支持横坐标按分类显示)

 按日期显示(支持横坐标或纵坐标按日期数据显示)

 显示面积(支持折线图显示面积) 

散点图

气泡图

多轴显示效果 

柱状图(支持显示文本,显示点,显示折线等设置)

饼状图

环形图样式 
 玫瑰图样式

 选中位移效果

雷达图

极坐标图

折线数据示例

散点数据示例 

气泡数据示例 

仪表盘

热力图

网格热力图

 

组合饼状图

 组合曲线图

组合组合图

组合热力曲线

标记线(最大值,最小值,平均值,按X轴显示,按Y轴显示等)

标记点(最大值,最小值等)

多坐标轴(按坐标轴停靠方向自动布局)

指数坐标轴

自定义坐标轴位置(设置停靠方向或自定义偏移值)

自定义偏移值效果

停靠居中效果 

网格线(根据XY坐标轴自动绘制,可以自定义蒙版显示)

 

悬停提示(支持显示当前鼠标横纵参考线,坐标轴当前值,Tooltip提示显示当前值)

图例控制(勾选显示隐藏绘图元素)

直角坐标系效果

饼状图效果 

雷达图效果 

极坐标图效果 

管道图(显示折线为轨道样式,支持模拟流体滚动效果和流速)

模拟钻井流体和流速 

平移缩放等操作 

表格组合(可以通过布局Table来放置Chart图表)

支持Linq To Chart模式(通过表达式树Expression<Func<T, Point>> selector的方式快速生成图表)

           var students = Student.Randoms(100);var groupAge = students.GroupBy(x => x.Age).OrderBy(x => x.Key);{var shape = groupAge.Create(x => new Point(x.Key, x.Sum(l => l.Score)));shape.Name = $"{shape.Name}-曲线图";this.Shapes.Add(shape);}{var shape = groupAge.Create(x =>{x.UseText = false;},x => new Point(x.Key, x.Count()),x => new Point(x.Key, x.Sum(l => l.Score)),x => new Point(x.Key, x.Key));shape.Name = $"{shape.Name}-多轴曲线图";this.Shapes.Add(shape);}{var shape = groupAge.CreateWithOnexAxis(x => x.UseText = false,x => x.Key,x => x.Sum(l => l.Score),x => x.Count());shape.Name = $"{shape.Name}-单X轴曲线图";this.Shapes.Add(shape);}var groupName = students.GroupBy(x => x.Name);{var shape = groupName.Create(x => new ValueCategory(x.Key, x.Sum(l => l.Age)), s =>{s.UseLine = false;s.UseText = true;s.UseBar = true;});shape.Name = $"{shape.Name}-分组曲线图";this.Shapes.Add(shape);}{var shape = groupName.Create(s =>{s.UseLine = true;s.UseText = true;s.UseBar = false;},x => new ValueCategory(x.Key, x.Count()),x => new ValueCategory(x.Key, x.Sum(l => l.Age)));shape.Name = $"{shape.Name}-多轴分组曲线图";this.Shapes.Add(shape);}{var shape = groupName.CreatePie(x => new PieCategory(){Name = x.Key,Value = x.Max(l => l.Score)});shape.Name = $"{shape.Name}";this.Shapes.Add(shape);}{var shape = groupName.CreatePie(x => new PieCategory(){Name = x.Key,Value = x.Sum(l => l.Score)}, x =>{x.RingRadius = 0.6;});shape.Name = $"{shape.Name}-环形图";this.Shapes.Add(shape);}{var shape = groupName.CreatePie(x => new PieCategory(){Name = x.Key,Value = x.Count()}, x =>{x.RingRadius = 0.2;x.RoseType = RoseType.Radius;});shape.Name = $"{shape.Name}-玫瑰图";this.Shapes.Add(shape);}{var shape = groupAge.CreatePolor(x =>{x.UseText = false;},12.CreateDoubles(0, groupAge.Max(l => l.Key)),x => new Point(x.Key, x.Sum(l => l.Score)),x => new Point(x.Key, x.Sum(l => l.Age)));shape.Name = $"{shape.Name}-极坐标图";this.Shapes.Add(shape);}{var shape = groupName.CreateRadar(s =>{s.UseLine = true;s.UseText = true;s.UseArea = true;},x => new ValueCategory(x.Key, x.Count()),x => new ValueCategory(x.Key, x.Min(l => l.Age)));shape.Name = $"{shape.Name}-雷达图";this.Shapes.Add(shape);}{var shape = students.ToList().OrderBy(x => x.Class).CreateHeat(x => new xyCategoryValue(){X = new Category(x.Name),Y = new Category(x.Class),Value = 1.0//Value = x.Score});shape.Name = $"{shape.Name}-热力图";this.Shapes.Add(shape);}{var shape = groupAge.CreateBubbleWithOnexAxis(x => x.UseText = false,x => x.Key,x => new ValuePoint2D(Random.Shared.Next(groupAge.Min(l => l.Key), groupAge.Max(l => l.Key)),Random.Shared.NextDouble() * x.Count(),x.Sum(l => l.Score)),x => new ValuePoint2D(Random.Shared.Next(groupAge.Min(l => l.Key), groupAge.Max(l => l.Key)),Random.Shared.NextDouble() * x.Count(),x.Min(l => l.Score)),x => new ValuePoint2D(Random.Shared.Next(groupAge.Min(l => l.Key), groupAge.Max(l => l.Key)),Random.Shared.NextDouble() * x.Count(),x.Max(l => l.Score)),x => new ValuePoint2D(x.Key,x.Count(),x.Average(l => l.Score)));shape.Name = $"{shape.Name}-单X轴气泡图";this.Shapes.Add(shape);}

五、演示视频

【WPF-Chart2D】基于DrawingVisual的图表和表格绘图_哔哩哔哩_bilibili

需要了解的知识点 

System.Windows.Controls 命名空间 | Microsoft Learn

控件库 - WPF .NET Framework | Microsoft Learn

WPF 介绍 | Microsoft Learn

XAML概述 - WPF .NET | Microsoft Learn

Windows Presentation Foundation 简介 - WPF .NET | Microsoft Learn

使用 Visual Studio 创建新应用教程 - WPF .NET | Microsoft Learn

了解更多

适用于 .NET 8 的 WPF 的新增功能 - WPF .NET | Microsoft Learn

适用于 .NET 7 的 WPF 的新增功能 - WPF .NET | Microsoft Learn

System.Windows.Controls 命名空间 | Microsoft Learn

Reference Source

Sysinternals - Sysinternals | Microsoft Learn

Windows app development documentation - Windows apps | Microsoft Learn

欢迎使用 Expression Blend | Microsoft Learn

https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/?view=netdesktop-7.0&WT.mc_id=MVP_380318

https://github.com/HeBianGu

HeBianGu的个人空间-HeBianGu个人主页-哔哩哔哩视频

相关文章:

演示:基于WPF的DrawingVisual开发的Chart图表和表格绘制

一、目的&#xff1a;基于WPF的DrawingVisual开发的Chart图表和表格绘制 二、预览 钻井井轨迹表格数据演示示例&#xff08;应用Table布局&#xff0c;模拟井轨迹深度的绘制&#xff09; 饼图表格数据演示示例&#xff08;应用Table布局&#xff0c;模拟多个饼状图组合显示&am…...

汽车保养BBBBBBBBBBB

小保养就是机油和机滤&#xff0c;4s店比较贵&#xff0c;可以在京东上买机油&#xff0c;可以包安装 极护、磁护 两款机油配方不同&#xff0c;极护系列机油注入液钛配方&#xff0c;拥有特别的油膜自适应能力&#xff0c;在各种形式条件下均能有效减少金属间的直接接触&…...

H3C R4900 G3服务器上配置本地磁盘RAID

首先web登录HDM后,查看本地磁盘 开机后在如下界面中按F10 等待后如下截图:单击“系统安装” 如下截图。默认选择,单击“下一步” 如下RAID配置,选中2个同样大的磁盘,单击“创建” 在跳出界面中,配置为RAID 1,输入需要的...

HBase DDL操作代码汇总(namespace+table CRUD操作)

HBase DDL操作 DDL操作主要是关于命名空间和表格的内容增删改查。 注&#xff1a;如果出现无法连接到zookeeper等的相关错误&#xff0c;可以将以下代码打jar包&#xff0c;在HMaster节点上执行 错误提示&#xff1a; Exception in thread “main” java.net.SocketTimeoutExc…...

关于TCP的基础知识

关于TCP的基础知识 TCP 是 Transmission Control Protocol 的缩写&#xff0c;中文意思是传输控制协议。 TCP 是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;它位于 OSI 模型的第四层&#xff08;传输层&#xff09;。TCP 协议通过建立连接、维护连接状态、…...

MyBatis 中的类型别名配置详解

目录 1. 什么是类型别名&#xff1f; 2. 类型别名的配置方法 2.1 使用单个标签 2.2 使用标签批量扫描 2.3 使用Alias注解 3. 注意事项 4. 相关知识拓展 4.1 MyBatis的映射文件 4.2 MyBatis的动态SQL 4.3 MyBatis与Spring的整合 4.4 性能优化 5. 结论 在现代Java开发…...

如何提高UI自动化的稳定性

用例层面&#xff1a; 1. 将用例设计成参数化&#xff0c;将测试数据通过参数进行传递 2. 对于一些可能会变化的参数&#xff0c;将其设计成全局变量&#xff0c;减少维护用例的成本 3. 对用例之间避免产生依赖&#xff0c;可以独立执行 框架层面&#xff1a; 1. 使用PO设…...

ubuntu如何开启和关闭图形界面

在Ubuntu中&#xff0c;你可以根据需要开启或关闭图形界面。以下是具体的方法&#xff1a; 关闭图形界面 方法一&#xff1a;使用 systemctl 命令 打开终端。输入以下命令切换到多用户目标&#xff08;相当于关闭图形界面&#xff09;&#xff1a;sudo systemctl set-defaul…...

从博客到ICT社区:深化学习与交流的桥梁

大家好&#xff0c;我是你们熟悉的云途-CloudJourney。在这个信息爆炸的时代&#xff0c;我一直致力于通过博客、公众号等平台&#xff0c;与大家分享关于Linux、K8S、Docker、网络、服务器以及OpenStack等前沿技术的见解与心得。然而&#xff0c;随着交流的深入&#xff0c;我…...

基于python+django+vue的旅游景点数据分析系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…...

C++简单缓冲区类设计

目录 1.引言 2.静态缓冲区 3.动态缓冲区 4.数据引用类 5.自动数据引用类 6.几种缓冲区的类关系图 7.注意事项 8.完整代码 1.引言 在C中&#xff0c;设计静态和动态缓冲区类时&#xff0c;需要考虑的主要差异在于内存管理的方式。静态缓冲区类通常使用固定大小的内存区域…...

MySQL 数据库

1. MySQL 数据库的基础知识 这一部分将带你了解 MySQL 数据库的核心概念。无论你是初学者还是想要巩固基础&#xff0c;这部分内容将帮助你打下扎实的基础。 数据库的定义与作用&#xff1a;什么是数据库&#xff1f;MySQL 与其他数据库系统的比较。MySQL 安装与配置&#xf…...

基于单片机的智能校园照明系统

由于校园用电量较大&#xff0c;本设计可以根据实际环境情况的改变&#xff0c;实现实时照明的控制。本设计以单片机芯片为控制芯片&#xff0c;热释电传感器采集教室中学生出入的信息&#xff0c;并把信息传递给单片机芯片&#xff0c;单片机芯片根据传感器传递过来的信息来控…...

高性能分布式搜索引擎Elasticsearch详解

♥️作者&#xff1a;小宋1021 &#x1f935;‍♂️个人主页&#xff1a;小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识&#xff0c;和大家一起努力呀&#xff01;&#xff01;&#xff01; &#x1f388;&#x1f388;加油&#xff01; 加油&#xff01…...

连锁收银系统的五大功能 选择开源收银系统三要素

连锁收银系统的五大功能&#xff0c;很多新手是不清楚的&#xff0c;老手也只是知道一些大概&#xff0c;今天&#xff0c;商淘云为大家分享收银系统的五大功能&#xff0c;尤其是第五个&#xff0c;大部分人不清楚&#xff0c;有的企业前面选了不合适的收银系统&#xff0c;导…...

虚幻引擎解决构建问题

1.Intermediate 文件夹 在 Unreal Engine中&#xff0c;Intermediate 文件夹扮演着构建过程中的临时存储角色。具体来说&#xff0c;Intermediate 文件夹用于存放在编译和构建项目过程中生成的中间文件&#xff0c;这些文件包括但不限于&#xff1a; 编译中间文件&#xff1a;…...

C++基础知识:C++中读文件的四种简单方式

1.读取文件的步骤&#xff1a; 读文件步骤如下: 1.包含头文件 #include <fstream> 2.创建流对象 ifstream ifs; 3.打开文件并判断文件是否打开成功 ifs.open(“文件路径”,打开方式); 4. 读数据 四种方式读取 5.关闭文件 ifs.close(); 读取方法一&#xff1a; #include…...

【人工智能】多模态AI:如何通过融合文本、图像与音频重塑智能系统未来

1. 引言 在人工智能领域&#xff0c;多模态AI 是一项令人兴奋的新兴技术&#xff0c;旨在通过结合文本、图像和音频等多种数据模态&#xff0c;打造更加智能化和人性化的系统。随着深度学习和自然语言处理&#xff08;NLP&#xff09;的飞速发展&#xff0c;多模态AI正在为下一…...

通过重写QStyle控制QT控件样式

文章目录 创建自定义 QStyle 子类重写绘制方法调整大小和边距使用自定义样式在Qt应用程序中,QStyle类是负责所有控件(如按钮、滚动条、复选框等)的外观和行为的基类。重写QStyle允许你自定义控件的外观和感觉,实现独特的界面设计。下面介绍一下如何通过重写QStyle控制QT控件的…...

WPF入门教学十八 动画入门

WPF&#xff08;Windows Presentation Foundation&#xff09;是微软推出的一种用于创建Windows客户端应用程序的用户界面框架。WPF 提供了丰富的动画支持&#xff0c;可以通过XAML或者代码来实现各种动画效果。以下是一个简单的WPF动画入门教学&#xff0c;我们将使用XAML来创…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...

如何做好一份技术文档?从规划到实践的完整指南

如何做好一份技术文档&#xff1f;从规划到实践的完整指南 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 总有一行代码&#xff0c;能点亮万千星辰。 &#x1f50d; 在技术的宇宙中&#xff0c;我愿做永不停歇的探索者。 ✨ 用代码丈量世界&…...

统计学(第8版)——统计抽样学习笔记(考试用)

一、统计抽样的核心内容与问题 研究内容 从总体中科学抽取样本的方法利用样本数据推断总体特征&#xff08;均值、比率、总量&#xff09;控制抽样误差与非抽样误差 解决的核心问题 在成本约束下&#xff0c;用少量样本准确推断总体特征量化估计结果的可靠性&#xff08;置…...