PowerShell - Gráficas con .Net (Parte 2)

Continuando con el tema gráficas en PowerShell con .Net (enlace) me gustaría describir otras formas de gráficas y de manipular y mostrar la información de las mismas.

Voy a comenzar dejando el código del post anterior para ir modificando los valores y demás:

#Cargo los ensambladores necesarios
[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms.DataVisualization")

#Creo el objeto gráfica
$Chart = New-object System.Windows.Forms.DataVisualization.Charting.Chart
$Chart.Width = 400
$Chart.Height = 300

#Creo el área de la gráfica para construir
$ChartArea = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea
$Chart.ChartAreas.Add($ChartArea)
[void]$Chart.Series.Add("Data")

$DiskInfo = Get-WMIObject -ComputerName "vsilva" Win32_LogicalDisk | Where-Object {$_.DeviceID -eq "C:"}
$UsedPer = [math]::Round((($DiskInfo.Size - $DiskInfo.Freespace)/$DiskInfo.Size)*100)
$FreePer = 100 - $UsedPer

#Agrego los valores a la gráfica
$Dato1 = New-Object System.Windows.Forms.DataVisualization.Charting.DataPoint(0, $UsedPer)
$Dato1.AxisLabel = "$UsedPer " + "% Usado"
$Dato1.Color = [System.Drawing.ColorTranslator]::FromHtml("#A55353")
$Chart.Series["Data"].Points.Add($Dato1)
$Dato2 = New-Object System.Windows.Forms.DataVisualization.Charting.DataPoint(0, $FreePer)
$Dato2.AxisLabel = "$FreePer " + "% Libre"
$Dato2.Color = [System.Drawing.ColorTranslator]::FromHtml("#99CD4E")
$Chart.Series["Data"].Points.Add($Dato2)

#Defino la forma de la gráfica
$Chart.Series["Data"].ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::Pie
$Chart.Series["Data"]["PieLabelStyle"] = "Disabled"

#Defino la leyenda
$Legend = New-Object system.Windows.Forms.DataVisualization.Charting.Legend
$Legend.name = "Leyenda"
$Chart.Legends.Add($Legend)

#Defino el título
[void]$Chart.Titles.Add("Gráfica de espacio en disco C:")

#Creo el formulario e invoco
$Form = New-Object Windows.Forms.Form
$Form.Text = "PowerShell Chart"
$Form.Width = 400
$Form.Height = 340
$Form.controls.add($Chart)
$Form.Add_Shown({$Form.Activate()})
$Form.ShowDialog()

Título

Lo primero que vamos a ver como podemos manipular es el título, muy importante para poder plasmar correctamente la información mas relevante. Para modificar, por ejemplo el tipo de letra, debemos agregar debajo de la línea que define el título lo siguiente:

[void]$Chart.Titles.Add("Gráfica de espacio en disco C:")
$Chart.Titles[0].Font = "Segoe UI Light,25pt"
$Chart.Titles[0].Alignment = "topCenter"

Con las 2 líneas anteriores que agregamos vamos a cambiarle el tipo de letra al título, el tamaño y la alineación. Si aparte de esto, queremos cambiar, por ejemplo el color, basta con agregar lo siguiente:

$Chart.Titles[0].ForeColor = "DarkBlue"

Podríamos declarar el color como objeto RGB de la siguiente manera:

$Chart.Titles[0].ForeColor = [System.Drawing.ColorTranslator]::FromHtml("#A5A5A5")

Forma

Si bien la forma mas conocida es la forma de torta, podemos con un simple cambio de código hacer que se vea de la siguiente manera:

Debemos modificar la línea siguiente, borrando la palabra Pie y agregando la palabra Doughnut:

$Chart.Series["Data"].ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::Doughnut

Hay que tener cuidado cuando estamos probando de cambiar las formas de las gráficas ya que no todas soportan el mismo tipo de datos iniciales, por lo que es recomendable leer el siguiente enlace a la documentación oficial, para obtener más información:

Tipos de gráficas - MSDN (Chart Types)

Color

Si bien ya habíamos definido colores para los valores podemos restablecer a los que se generan por defecto, eliminando o comentando las siguientes líneas:

$Dato1.Color = [System.Drawing.ColorTranslator]::FromHtml("#A55353")
$Dato2.Color = [System.Drawing.ColorTranslator]::FromHtml("#99CD4E")

O simplemente probar colores nuevos para los valores. La idea es poder experimentar lo que mas nos gusta o que mejor encaja a nuestros requerimientos.

Podemos hacer una prueba de cambiar a la forma Pyramid y borrarle los colores que definimos, quedando de la siguiente manera:

Leyenda

Otra variante es eliminar la leyenda de la gráfica e introducir los valores dentro del área del gráfico, esta acción se puede realizar eliminando las siguientes líneas:

$Legend = New-Object system.Windows.Forms.DataVisualization.Charting.Legend
$Legend.name = "
Leyenda"
  
$Chart.Legends.Add($Legend)

Guardar gráfica como archivo de imagen

Por último detallar la manera mas simple para guardar nuestras gráficas como archivo .jpg. Lo vamos a hacer con la siguiente línea de código:

$Chart.SaveImage($ImageFile,"png")

Como habrán podido imaginar, la variable ImageFile corresponde al nombre con el que se guardará la gráfica. En caso de no querer utilizar una variable, ingresamos el nombre dentro de comillas dobles (“”).

Happy scripting!

Comments