Круговая диаграмма (PieChart )
Вариант 1
Add(MainForm,2953706,70,119) { Width=549 Height=316 Point(onClose) link(onCreate,4794102:doString,[]) link(onClose,10162556:doConsoleTerminate,[]) } Add(FormatStr,4794102,126,133) { Mask="Add-Type -AssemblyName System.Windows.Forms.DataVisualization\r\n[System.Windows.Forms.DataVisualization.Charting.Chart]::new()\r\n\r\nFunction Out-PieChart {\r\n [CmdletBinding()]\r\n param (\r\n [Parameter(ValueFromPipeline)]\r\n [psobject] $inputObject,\r\n [Parameter()]\r\n [string] $PieChartTitle,\r\n [Parameter()]\r\n [int] $ChartWidth = 800,\r\n [Parameter()]\r\n [int] $ChartHeight = 400,\r\n [Parameter()]\r\n [string[]] $NameProperty,\r\n [Parameter()]\r\n [string] $ValueProperty,\r\n [Parameter()]\r\n [switch] $Pie3D,\r\n [Parameter()]\r\n [switch] $DisplayToScreen,\r\n [Parameter()]\r\n [string] $saveImage\r\n )\r\n begin {\r\n Add-Type -AssemblyName System.Windows.Forms.DataVisualization\r\n # Frame\r\n $Chart = [System.Windows.Forms.DataVisualization.Charting.Chart]@{\r\n Width = $ChartWidth\r\n Height = $ChartHeight\r\n BackColor = 'White'\r\n BorderColor = 'Black'\r\n }\r\n # Body\r\n $null = $Chart.Titles.Add($PieChartTitle)\r\n $Chart.Titles[0].Font = 'segoeuilight,20pt'\r\n $Chart.Titles[0].Alignment = 'TopCenter'\r\n # Create Chart Area\r\n $ChartArea = [System.Windows.Forms.DataVisualization.Charting.ChartArea]::new()\r\n $ChartArea.Area3DStyle.Enable3D = $Pie3D.ToBool()\r\n $ChartArea.Area3DStyle.Inclination = 50\r\n $Chart.ChartAreas.Add($ChartArea)\r\n # Define Chart Area\r\n $null = $Chart.Series.Add('Data')\r\n $Chart.Series['Data'].ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::Pie\r\n # Chart style\r\n $Chart.Series['Data']['PieLabelStyle'] = 'Outside'\r\n $Chart.Series['Data']['PieLineColor'] = 'Black'\r\n $Chart.Series['Data']['PieDrawingStyle'] = 'Concave'\r\n\r\n $chart.Series['Data'].IsValueShownAsLabel = $true\r\n $chart.series['Data'].Label = '#PERCENT\n#VALX'\r\n # Set ArrayList\r\n $XColumn = [System.Collections.ArrayList]::new()\r\n $yColumn = [System.Collections.ArrayList]::new()\r\n }\r\n process {\r\n if (-not $valueProperty) {\r\n $numericProperties = foreach ($property in $inputObject.PSObject.Properties) {\r\n if ([Double]::TryParse($property.Value, [Ref]$null)) {\r\n $property.Name\r\n }\r\n }\r\n if (@($numericProperties).Count -eq 1) {\r\n $valueProperty = $numericProperties\r\n }\r\n else {\r\n throw 'Unable to automatically determine properties to graph'\r\n }\r\n }\r\n if (-not $LabelProperty) {\r\n if ($inputObject.PSObject.Properties.Count -eq 2) {\r\n $LabelProperty = $inputObject.Properties.Name -ne $valueProperty\r\n }\r\n elseif ($inputObject.PSObject.Properties.Item('Name')) {\r\n $LabelProperty = 'Name'\r\n }\r\n else {\r\n throw 'Cannot convert Data'\r\n }\r\n }\r\n # Bind chart columns\r\n $null = $yColumn.Add($InputObject.$valueProperty)\r\n $null = $xColumn.Add($inputObject.$LabelProperty)\r\n }\r\n end {\r\n # Add data to chart\r\n $Chart.Series['Data'].Points.DataBindXY($xColumn, $yColumn)\r\n # Save file\r\n if ($psboundparameters.ContainsKey('saveImage')) {\r\n try{\r\n if (Test-Path (Split-Path $saveImage -Parent)) {\r\n $SaveImage = $pscmdlet.GetUnresolvedProviderPathFromPSPath($saveImage)\r\n $Chart.SaveImage($saveImage, 'png')\r\n } else {\r\n throw 'Invalid path, the parent directory must exist'\r\n }\r\n } catch {\r\n throw\r\n }\r\n }\r\n # Display Chart to screen\r\n if ($DisplayToScreen.ToBool()) {\r\n $Form = [Windows.Forms.Form]@{\r\n Width = 800\r\n Height = 450\r\n AutoSize = $true\r\n FormBorderStyle = 'FixedDialog'\r\n MaximizeBox = $false\r\n MinimizeBox = $false\r\n KeyPreview = $true\r\n }\r\n $Form.controls.add($Chart)\r\n $Chart.Anchor = 'Bottom, Right, Top, Left'\r\n $Form.Add_KeyDown({\r\n if ($_.KeyCode -eq 'Escape') { $Form.Close() }\r\n })\r\n $Form.Add_Shown( {$Form.Activate()})\r\n $form.Handle | Set-Clipboard\r\n $Form.ShowDialog() | Out-Null\r\n }\r\n }\r\n}\r\n\r\n@'\r\n%1\r\n'@ | ConvertFrom-Csv -Delimiter ';' |\r\n Out-PieChart -PieChartTitle '%2' -DisplayToScreen\r\n\r\n" link(onFString,10162556:doConsoleExec,[]) link(Str1,3128668:Text,[]) link(Str2,13553777:Text,[(139,117)(174,117)]) } Add(WinExec,10162556,182,119) { FileName="powershell" Mode=0 Action="runas" Point(doConsoleExec) Point(onConsoleResult) Point(onConsoleError) Point(doConsoleTerminate) Point(onConsoleTerminate) link(onConsoleTerminate,4020321:doSetText,[]) } Add(StrList,3128668,126,77) { Strings=#15:Name;Population|16:Индия;1428167000|16:Китай;1411750000|13:США;334233854|19:Индонезия;274900000|18:Пакистан;241499431|17:Нигерия;226826390|18:Бразилия;220165780|19:Бангладеш;169828911|16:Россия;146447400|17:Мексика;133649565| } Add(ClipboardHook,4020321,238,147) { link(onChange,11749786:doVisible,[]) } Add(WinTools,11749786,294,147) { } Add(VisualStrings,13553777,168,77) { Lines=#39:Топ 10 стран с самым большим населением| Width=228 }
Вариант 2
Add(MainForm,7880538,140,168) { Width=549 Height=316 Point(onClose) link(onCreate,4794102:doString,[]) link(onClose,10162556:doConsoleTerminate,[]) } Add(FormatStr,4794102,196,182) { Mask="Add-Type -AssemblyName System.Windows.Forms.DataVisualization\r\n[System.Windows.Forms.DataVisualization.Charting.Chart]::new()\r\n\r\nFunction Out-PieChart {\r\n [CmdletBinding()]\r\n param (\r\n [Parameter(ValueFromPipeline)]\r\n [psobject] $inputObject,\r\n [Parameter()]\r\n [string] $PieChartTitle,\r\n [Parameter()]\r\n [int] $ChartWidth = 800,\r\n [Parameter()]\r\n [int] $ChartHeight = 400,\r\n [Parameter()]\r\n [string[]] $NameProperty,\r\n [Parameter()]\r\n [string] $ValueProperty,\r\n [Parameter()]\r\n [switch] $Pie3D,\r\n [Parameter()]\r\n [switch] $DisplayToScreen,\r\n [Parameter()]\r\n [string] $saveImage\r\n )\r\n begin {\r\n Add-Type -AssemblyName System.Windows.Forms.DataVisualization\r\n # Frame\r\n $Chart = [System.Windows.Forms.DataVisualization.Charting.Chart]@{\r\n Width = $ChartWidth\r\n Height = $ChartHeight\r\n BackColor = 'White'\r\n BorderColor = 'Black'\r\n }\r\n # Body\r\n $null = $Chart.Titles.Add($PieChartTitle)\r\n $Chart.Titles[0].Font = 'segoeuilight,20pt'\r\n $Chart.Titles[0].Alignment = 'TopCenter'\r\n # Create Chart Area\r\n $ChartArea = [System.Windows.Forms.DataVisualization.Charting.ChartArea]::new()\r\n $ChartArea.Area3DStyle.Enable3D = $Pie3D.ToBool()\r\n $ChartArea.Area3DStyle.Inclination = 50\r\n $Chart.ChartAreas.Add($ChartArea)\r\n # Define Chart Area\r\n $null = $Chart.Series.Add('Data')\r\n $Chart.Series['Data'].ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::Pie\r\n # Chart style\r\n $Chart.Series['Data']['PieLabelStyle'] = 'Outside'\r\n $Chart.Series['Data']['PieLineColor'] = 'Black'\r\n $Chart.Series['Data']['PieDrawingStyle'] = 'Concave'\r\n\r\n $chart.Series['Data'].IsValueShownAsLabel = $true\r\n $chart.series['Data'].Label = '#PERCENT\n#VALX'\r\n # Set ArrayList\r\n $XColumn = [System.Collections.ArrayList]::new()\r\n $yColumn = [System.Collections.ArrayList]::new()\r\n }\r\n process {\r\n if (-not $valueProperty) {\r\n $numericProperties = foreach ($property in $inputObject.PSObject.Properties) {\r\n if ([Double]::TryParse($property.Value, [Ref]$null)) {\r\n $property.Name\r\n }\r\n }\r\n if (@($numericProperties).Count -eq 1) {\r\n $valueProperty = $numericProperties\r\n }\r\n else {\r\n throw 'Unable to automatically determine properties to graph'\r\n }\r\n }\r\n if (-not $LabelProperty) {\r\n if ($inputObject.PSObject.Properties.Count -eq 2) {\r\n $LabelProperty = $inputObject.Properties.Name -ne $valueProperty\r\n }\r\n elseif ($inputObject.PSObject.Properties.Item('Name')) {\r\n $LabelProperty = 'Name'\r\n }\r\n else {\r\n throw 'Cannot convert Data'\r\n }\r\n }\r\n # Bind chart columns\r\n $null = $yColumn.Add($InputObject.$valueProperty)\r\n $null = $xColumn.Add($inputObject.$LabelProperty)\r\n }\r\n end {\r\n # Add data to chart\r\n $Chart.Series['Data'].Points.DataBindXY($xColumn, $yColumn)\r\n # Save file\r\n if ($psboundparameters.ContainsKey('saveImage')) {\r\n try{\r\n if (Test-Path (Split-Path $saveImage -Parent)) {\r\n $SaveImage = $pscmdlet.GetUnresolvedProviderPathFromPSPath($saveImage)\r\n $Chart.SaveImage($saveImage, 'png')\r\n } else {\r\n throw 'Invalid path, the parent directory must exist'\r\n }\r\n } catch {\r\n throw\r\n }\r\n }\r\n # Display Chart to screen\r\n if ($DisplayToScreen.ToBool()) {\r\n $Form = [Windows.Forms.Form]@{\r\n Width = 800\r\n Height = 450\r\n AutoSize = $true\r\n FormBorderStyle = 'FixedDialog'\r\n MaximizeBox = $false\r\n MinimizeBox = $false\r\n KeyPreview = $true\r\n }\r\n $Form.controls.add($Chart)\r\n $Chart.Anchor = 'Bottom, Right, Top, Left'\r\n $Form.Add_KeyDown({\r\n if ($_.KeyCode -eq 'Escape') { $Form.Close() }\r\n })\r\n $Form.Add_Shown( {$Form.Activate()})\r\n $form.Handle | Set-Clipboard\r\n $Form.ShowDialog() | Out-Null\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n@'\r\n%1\r\n'@ | ConvertFrom-Csv -Delimiter ';' |\r\n Out-PieChart -PieChartTitle '%2' -Pie3D -saveImage .\pie_chart.png\r\n\r\n\r\n" link(onFString,10162556:doConsoleExec,[]) link(Str1,4364501:Text,[]) link(Str2,7146705:Text,[(209,159)(258,159)]) } Add(WinExec,10162556,252,168) { FileName="powershell" Mode=0 Action="runas" Point(doConsoleExec) Point(onConsoleResult) Point(onConsoleError) Point(doConsoleTerminate) Point(onConsoleTerminate) link(onConsoleTerminate,10612163:doEvent1,[]) } Add(Image,13903628,392,196) { Width=533 Height=277 Align=5 } Add(PNG,14777831,343,196) { FileName="pie_chart.png" Point(doBitmap) link(onBitmap,13903628:doLoad,[]) } Add(Hub,10612163,301,196) { link(onEvent1,14777831:doLoad,[]) link(onEvent2,14777831:doBitmap,[(333,209)(333,216)]) } Add(VisualStrings,7146705,252,126) { Lines=#39:Топ 10 стран с самым большим населением| Width=228 } Add(StrList,4364501,196,119) { Strings=#15:Name;Population|16:Индия;1428167000|16:Китай;1411750000|13:США;334233854|19:Индонезия;274900000|18:Пакистан;241499431|17:Нигерия;226826390|18:Бразилия;220165780|19:Бангладеш;169828911|16:Россия;146447400|17:Мексика;133649565| }
Проверено на
- Windows 10 (x64)
- Hiasm v4.05 build 186 (delphi) rev - 2407
|