图表控件LightningChart .NET中文教程 - 如何创建WPF 2D热图?(二)

LightningChart.NET完全由GPU加速,并且性能经过优化,可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D,高级3D,Polar,Smith,3D饼/甜甜圈,地理地图和GIS图表以及适用于科学,工程,医学,航空,贸易,能源和其他领域的体绘制功能。

在上文中(点击这里回顾>>),我们为大家介绍了什么是WPF 2D热图及项目的基本概述和设置等,本文将继续重点介绍代码部分的实现,请继续关注我们获取更多LightningChart中文教程指南哦~

立即获取LightningChart .NET正式版下载

代码审查

主代码将被封装在MainWindow.xaml.cs中,在这里我们将找到UI控件的代码。

图表控件LightningChart .NET中文教程

在代码中,我们将检查两个方法,它们将创建正确绘制2D热图所需的属性。交互式示例使用各种用户控件构建,来操纵和更改图表的视觉属性。生成这个图不需要这些控件,因此我们将重点关注负责生成对象的代码。

CreateChart()

这个主方法将创建2D热图对象:

_chart = new LightningChart();

我们需要在更新图表属性时禁用控件重绘,BeginUpdate()将重新绘制控件。

_chart.BeginUpdate();

LightningChart 2D热图有以下主要视图:ViewXY, View3D, ViewPie3D, ViewPolar, ViewSmith,可以通过设置ActiveView属性来更改可见视图,默认视图为ViewXY。

_chart.ActiveView = ActiveView.ViewXY;
_chart.ChartName = "Heat map chart";

我们可以访问X轴和Y轴,并将这些对象分配给AxisX/AxisY对象。

// Configure x-axis.
_chart.ViewXY.XAxes[0].ValueType = AxisValueType.Number;
_chart.ViewXY.XAxes[0].ScrollMode = XAxisScrollMode.None;
_chart.ViewXY.XAxes[0].SetRange(0, 100);
// Configure y-axis.
_chart.ViewXY.YAxes[0].SetRange(0, 100);

ValueType有以下选项:

  • Number:用于整数和十进制表示的常规数字格式,当AutoFormatLabels被禁用时,应用LabelsNumberFormat默认值。
  • Time:用于一天中的时间演示,当禁用AutoFormatLabelsis时,应用LabelsTimeFormat。
  • DateTime:日期显示,可选择的时间一天。当AutoFormatLabels被禁用时,LabelsTimeFormat也应用于此,类似于Time type。
  • SetRange:通过给最小和最大属性赋值来设置轴的值范围,最小值应该小于最大值。当尝试设置Minimum 大于 Maximum或反之亦然时,内部限制器将限制接近另一个值的值。要同时设置两个值,请使用SetRange(…)方法。在SetRange中传入Minimum 大于 Maximum会自动翻转这些值,使Minimum 小于 Maximum。
配置图例框

图例框可以自动或手动放置,自动放置允许它们对齐到2D热图段的左/上/右/底部,或在边缘,用position属性控制位置。

//Configure legend
_chart.ViewXY.LegendBoxes[0].Layout = LegendBoxLayout.Vertical;
_chart.ViewXY.LegendBoxes[0].Offset = new PointIntXY(-15, -70);
// Configure legend box.
_chart.ViewXY.LegendBoxes[0].Layout = LegendBoxLayout.Vertical;

位置选项有:TopCenter, TopLeft, TopRight, LeftCenter, RightCenter, BottomLeft, BottomCenter, BottomRight, Manual。

为数据准备IntensityGridSeries

IntensityGridSeries允许可视化M x N个节点数组,通过指定的值范围调色板着色,节点之间的颜色被插值。

IntensityGridSeries是X和Y维度上均匀间隔的矩形序列,这个系列允许绘制等高线、等高线标签和线框图。

_intensityGrid = new IntensityGridSeries(_chart.ViewXY, _chart.ViewXY.XAxes[0], _chart.ViewXY.YAxes[0])
{
ContourLineType = ContourLineTypeXY.None,
Optimization = IntensitySeriesOptimization.DynamicData,
LegendBoxUnits = "°C",
LegendBoxValuesFormat = "0"
};
_intensityGrid.Title.Text = "Heat map";
_intensityGrid.AllowUserInteraction = false;
_chart.ViewXY.IntensityGridSeries.Add(_intensityGrid);
从位图文件创建强度网格数据

使用SetHeightDataFromBitmap方法来实现这一点。

series Data数组属性获取位图大小的大小(如果不使用抗混叠或重采样),对于每个位图图像像素,红色、绿色和蓝色值被求和。和越大,该节点的数据值就越大。黑色和深色得到较低的值,而明亮和白色得到较高的值。

图表控件LightningChart .NET中文教程

主图像将位于资源文件夹中
private void SetExampleData()
{
// Load example data from resource stream.
string strResourceImage = "Ground400x240.jpg";
string baseDirectory = Environment.CurrentDirectory;
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(baseDirectory + @"\Resources\" + strResourceImage);
CreateIntensitySeriesData(bitmap);
}
填充样式
private void ApplyFillStyle()
{
if (_constructing == true)
{
return;
}
// Disable rendering, strongly recommended before updating chart properties.
_chart.BeginUpdate();
if (radioButtonSourceDataColoring.IsChecked == true)
{
_intensityGrid.Fill = IntensityFillStyle.FromSurfacePoints;
}
else if (radioButtonValueColoringGradient.IsChecked == true)
{
_intensityGrid.Fill = IntensityFillStyle.Paletted;
_intensityGrid.ValueRangePalette.Type = PaletteType.Gradient;
}
else if (radioButtonValueColoringSolid.IsChecked == true)
{
_intensityGrid.Fill = IntensityFillStyle.Paletted;
_intensityGrid.ValueRangePalette.Type = PaletteType.Uniform;
}
else if (radioButtonSingleColor.IsChecked == true)
{
_intensityGrid.Fill = IntensityFillStyle.Toned;
}

使用Fill属性选择填充样式,以下选项可用:

  • None:通过使用这个,没有填充应用,这个选择对于线框网格很有用。
  • FromSurfacePoints:使用Data属性节点的颜色。
  • Toned:ToneColor适用。
  • PalettedByY:通过调色板的Y值着色。
  • PalettedByValue:调色板通过SurfacePoint的值字段着色。
  • Bitmap:位图图像被拉伸以覆盖整个二维热图表面,在BitmapFill属性中设置位图图像,BitmapFill属性具有垂直和水平镜像图像的子属性。

启用FullInterpolation属性来在填充中使用增强的插值方法,请注意这将导致更多的CPU和GPU使用。通过使用全插值,填充质量更好,但只有当数据数组大小相当小时才能看到填充质量。

等高线

等高线:登高线可以与填充和线框属性一起使用,通过设置ContourLineType属性,可以绘制不同样式的等高线:

  • None:没有等高线显示。
  • FastColorZones:线条在调色板步骤末端绘制为细区域,允许非常强大的渲染,这非常适合连续更新或动画表面。陡峭的数值变化用细线表示,而平缓的高差用粗线表示。每条线都使用ContourLineStyle.Color定义的相同颜色,区域宽度可以通过FastContourZoneRange属性设置,该值在y轴范围内。
  • FastPalettedZones:与FastColorZones类似,但线条着色遵循ValueRangePalette选项。
  • ColorLine:像FastColorZones一样,但是等高线是实际的线。渲染需要更长的时间,不建议持续更新或动画2D热图表面,线宽可以用ContourLineStyle.Width属性来调整。
  • PalettedLine:与ColorLine类似,但线条着色遵循ValueRangePalette选项。
private void ApplyContourLinesStyle()
{
if (_constructing == true)
{
return;
}
// Disable rendering, strongly recommended before updating chart properties.
_chart.BeginUpdate();
if (radioButtonContourNone.IsChecked == true)
{
_intensityGrid.ContourLineType = ContourLineTypeXY.None;
}
else if (radioButtonContourFastZones.IsChecked == true)
{
_intensityGrid.ContourLineType = ContourLineTypeXY.FastColorZones;
}
else if (radioButtonContourFastPalettedZones.IsChecked == true)
{
_intensityGrid.ContourLineType = ContourLineTypeXY.FastPalettedZones;
}
else if (radioButtonContourLines.IsChecked == true)
{
_intensityGrid.ContourLineType = ContourLineTypeXY.ColorLine;
}
else if (radioButtonContourPalettedLines.IsChecked == true)
{
_intensityGrid.ContourLineType = ContourLineTypeXY.PalettedLine;
}
最终的WPF 2D热图应用程序

这个项目的逻辑是基于一个网格型的二维热图,如果我们选择允许观察线框的选项,将看到每个生成的节点。

图表控件LightningChart .NET中文教程

最高值将显示为红色,最低值将显示为紫色。对于本例,强度范围内的值与图像中每个像素的颜色强度成正比。如果您上传的图像背景为黑色,则它将在热图中显示紫色,因为它是强度范围中最暗的颜色。

图表控件LightningChart .NET中文教程

例如,我们可以通过观察强烈的肤色来识别人类面部温度最高的区域。在下面的图片中,我们可以注意到,面部最热的区域在40-50摄氏度之间(这对人类来说是相当高的,但可以说这是一个可以接受的范围,用于演示目的),而最冷的区域在30摄氏度之间。

图表控件LightningChart .NET中文教程

LightningChart.NET库允许我们识别颜色并生成自己的调整来制作渐变层,这有助于我们识别许多研究案例的强度,例如温度,振动等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/198634.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习数分--简单案例1

业务背景:某服务类app,近期发现日新增用户数下滑明显。 具体描述:假设公司产品(一款本地服务类app),近期发现日新增用户数下滑明显。老板要求你分析:数据异动的原因是什么? #最开始…

Java 数据结构篇-二叉树的深度优先遍历(实现:递归方式、非递归方式)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 二叉树的说明 1.1 二叉树的实现 2.0 二叉树的优先遍历说明 3.0 用递归方式实现二叉树遍历 3.1 用递归方式实现遍历 - 前序遍历 3.2 用递归方式实现遍历 - 中序遍…

第五十六天|583. 两个字符串的删除操作 72. 编辑距离

583. 两个字符串的删除操作 可以求出最大子序列然后用字符串长度去减&#xff0c;也可以用删除的思路&#xff0c;如下&#xff1a; class Solution { public:int minDistance(string word1, string word2) {vector<vector<int>> dp(word1.size()1,vector<int…

逻辑回归 使用Numpy实现逻辑回归

使用Numpy实现逻辑回归 sigmoid 函数 g ( z ) 1 ( 1 e − z ) g(z)\frac{1}{(1e^{−z} )} g(z)(1e−z)1​ # sigmoid 函数 def sigmod(z):return 1/(1np.exp(-z))线性计算与梯度下降 J ( θ ) − 1 m [ ∑ i 1 m y ( i ) l o g ⁡ ( h θ ( x ( i ) ) ) ( 1 − y ( i ) …

ROS 元功能包

ROS元功能包&#xff08;Metapackage&#xff09;是一种特殊的软件包&#xff0c;它本身并不包含任何可执行代码或数据文件。在ROS 1中&#xff0c;可以通过catkin_create_pkg命令创建元功能包。 相反&#xff0c;它的主要目的是作为一组相关功能包的集合或者依赖关系列表。使…

国标GB28181视频监控EasyCVR内网环境部署无法启动怎么办?

安防视频监控系统EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;能对外分发RTMP、RTSP、HTTP-FLV、…

【二叉树】226.翻转二叉树

题目 class Solution {public TreeNode invertTree(TreeNode root) {if (root null || (root.left null && root.right null)) {return root;}TreeNode originR invertTree(root.right);TreeNode originL invertTree(root.left);root.left originR;root.right …

微信聊天窗口测试用例

以前没测过客户端的测试&#xff0c;昨天面试被问到聊天窗口测试场景设计&#xff0c;感觉自己答的不好&#xff0c;结束后上网查了一下客户端/app测试的要点&#xff0c;按照测试策略来分&#xff0c;主要涉及到如下测试类型&#xff1a; 1、功能测试 2、性能测试 3、界面测试…

GS016电动工具调速控制电路芯片,7V ~ 24V 7mA ~ 10mA具 有电源电压范围宽、功耗小、抗干扰能力强等特点

GS016是一款直流有刷电机调速电路&#xff0c;输出端内置14V钳位结构&#xff0c;具 有电源电压范围宽、功耗小、抗干扰能力强等特点。通过桥接内部电阻网 络&#xff0c;可以改变PWM占空比输出&#xff0c;达到控制电机转速作用。采用SOP14的封装形式封装。 主要特点&#xf…

Hadoop学习笔记(HDP)-Part.10 创建集群

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

ipad Google浏览器,使用默认搜索,页面使用pc模式

ipad Google浏览器&#xff0c;使用默认搜索&#xff0c;页面使用pc模式 1. 设置默认搜索引擎 2. 设置页面使用PC模式 参考&#xff1a;https://zhuanlan.zhihu.com/p/556041670

Git 移除已经add的文件

文章目录 前言移除已经add的文件情况一&#xff1a;不删除物理文件情况二&#xff1a;删除物理文件 前言 在使用Git进行文件提交时&#xff0c;有时候我们需要移除已经add的文件。下面将介绍移除已经add的文件。 移除已经add的文件 如果我们需要移除已经add的文件&#xff0c…

查看设备是否装ros usb驱动步骤

1。在目录中 ls dev/video* 可以查看到当前设备usb存在情况 2。roscd usb_cam目录下 3. 进入到launch 文件夹下&#xff0c;编辑usb_cam-test.launch文件 <launch> <node name"usb_cam" pkg"usb_cam" type"usb_cam_node" output…

学习canvas

Canvas是一个基于像素的渲染引擎&#xff0c;它使用JavaScript API在画布上绘制图像。以下是它的一些优点和缺点&#xff1a; 优点&#xff1a; Canvas的渲染速度快&#xff0c;适合处理大量图像和高度动态的图像。 可以直接操作像素&#xff0c;从而能够创建出高质量、流畅的…

从零开始学习 JS APL(五):完整指南和实例解析

目录 学习目标&#xff1a; 学习内容&#xff1a; 学习时间&#xff1a; 学习内容&#xff1a; Window对象&#xff1a; 定时器-延时函数&#xff1a; JS 执行机制&#xff1a; location对象&#xff1a; 本地存储&#xff1a; 本地存储分类- localStorage&#xff1a…

OTN设备,ZXONE 9700,ZXMP M721

文章目录 ZXONE 9700分组OTN产品产品特点 ZXMP M721城域边缘OTN产品产品特点 ZXONE 9700分组OTN产品 ZXONE 9700系列产品&#xff0c;支持10G/40G/100G/400G传输速率&#xff0c;可实现28.8T/14.4T/9.2T/4.4T ODUk的大容量电层交叉和10G/40G/100G/400G波长的光层交叉及分组交换…

WordPress免费插件大全清单【2023最新】

WordPress已经成为全球范围内最受欢迎的网站建设平台之一。要让您的WordPress网站更具功能性、效率性&#xff0c;并提供卓越的用户体验&#xff0c;插件的选择与使用变得至关重要。 WordPress插件的作用 我们先理解一下插件在WordPress生态系统中的作用。插件是一种能够为Wo…

【云原生-K8s】检查yaml文件安全配置kubesec部署及使用

基础介绍基础描述特点 部署在线下载百度网盘下载安装 使用官网样例yamlHTTP远程调用安全建议 总结 基础介绍 基础描述 Kubesec 是一个开源项目&#xff0c;旨在为 Kubernetes 提供安全特性。它提供了一组工具和插件&#xff0c;用于保护和管理在 Kubernetes 集群中的工作负载和…

前端三段面试经历(字节、滴滴、虎牙),讲真的还挺难的

小编整理最近了小伙伴中具有代表性的面试经历及面试题&#xff0c;他们的情况小编就不多说了&#xff0c;一起看看他们面试中都遇到了什么问题。 字节一面 刚开始就问我的项目&#xff0c;问得很详细。 webpack 提高构建速度的方式loader 输入什么产出什么 &#xff1f;webpac…

全光谱护眼灯好吗?考公用的台灯推荐

全光谱护眼台灯是近年来新兴的一种照明产品&#xff0c;其使用全光谱LED灯泡&#xff0c;能够模拟自然光的光谱&#xff0c;为人们提供更加舒适、柔和的照明环境。相比传统的白炽灯或荧光灯&#xff0c;全光谱护眼台灯在照明效果、节能环保、眼睛健康等方面都有着明显的优势。 …