翻譯|使用教程|編輯:龔雪|2023-11-28 11:06:09.407|閱讀 110 次
概述:本教程主要介紹如何使用圖表控件LightningChart .NET中創建WPF 2D熱圖來用于高級的數據分析,歡迎下載最新版控件體驗!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
LightningChart.NET完全由GPU加速,并且性能經過優化,可用于實時顯示海量數據-超過10億個數據點。 LightningChart包括廣泛的2D,高級3D,Polar,Smith,3D餅/甜甜圈,地理地圖和GIS圖表以及適用于科學,工程,醫學,航空,貿易,能源和其他領域的體繪制功能。
在上文中(點擊這里回顧>>),我們為大家介紹了什么是WPF 2D熱圖及項目的基本概述和設置等,本文將繼續重點介紹代碼部分的實現,請繼續關注我們獲取更多LightningChart中文教程指南哦~
主代碼將被封裝在MainWindow.xaml.cs中,在這里我們將找到UI控件的代碼。
在代碼中,我們將檢查兩個方法,它們將創建正確繪制2D熱圖所需的屬性。交互式示例使用各種用戶控件構建,來操縱和更改圖表的視覺屬性。生成這個圖不需要這些控件,因此我們將重點關注負責生成對象的代碼。
這個主方法將創建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有以下選項:
圖例框可以自動或手動放置,自動放置允許它們對齊到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允許可視化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數組屬性獲取位圖大小的大小(如果不使用抗混疊或重采樣),對于每個位圖圖像像素,紅色、綠色和藍色值被求和。和越大,該節點的數據值就越大。黑色和深色得到較低的值,而明亮和白色得到較高的值。
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屬性選擇填充樣式,以下選項可用:
啟用FullInterpolation屬性來在填充中使用增強的插值方法,請注意這將導致更多的CPU和GPU使用。通過使用全插值,填充質量更好,但只有當數據數組大小相當小時才能看到填充質量。
等高線:登高線可以與填充和線框屬性一起使用,通過設置ContourLineType屬性,可以繪制不同樣式的等高線:
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; }
這個項目的邏輯是基于一個網格型的二維熱圖,如果我們選擇允許觀察線框的選項,將看到每個生成的節點。
最高值將顯示為紅色,最低值將顯示為紫色。對于本例,強度范圍內的值與圖像中每個像素的顏色強度成正比。如果您上傳的圖像背景為黑色,則它將在熱圖中顯示紫色,因為它是強度范圍中最暗的顏色。
例如,我們可以通過觀察強烈的膚色來識別人類面部溫度最高的區域。在下面的圖片中,我們可以注意到,面部最熱的區域在40-50攝氏度之間(這對人類來說是相當高的,但可以說這是一個可以接受的范圍,用于演示目的),而最冷的區域在30攝氏度之間。
LightningChart.NET庫允許我們識別顏色并生成自己的調整來制作漸變層,這有助于我們識別許多研究案例的強度,例如溫度,振動等。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網