Uso del control de gráficos Chart en C# WinForms

En aplicaciones Windows Forms con C#, el control Chart permite visualizar datos de manera gráfica. A continuación, se describe cómo configurarlo para diversos tipos de gráficos.

Primero, se define una clase para representar los elemenots de datos del gráfico:

/// <summary>
/// Clase que modela un punto de datos para el gráfico.
/// </summary>
public class ElementoDato
{
    public ElementoDato() { }
    public ElementoDato(string etiqueta, double cantidad)
    {
        this.Etiqueta = etiqueta;
        this.Cantidad = cantidad;
    }
    /// <summary>
    /// Texto descriptivo del elemento.
    /// </summary>
    public string Etiqueta { get; set; }
    /// <summary>
    /// Valor numérico asociado.
    /// </summary>
    public double Cantidad { get; set; }
}

Luego, se crea una clase auxiliar para manejar la configuración y visualizaicón del gráfico:

/// <summary>
/// Clase que encapsula la lógica de presentación del control Chart.
/// </summary>
public class GestorGrafico
{
    private Chart controlChart;
    public GestorGrafico(Chart chart)
    {
        controlChart = chart;
    }

    /// <summary>
    /// Renderiza un gráfico según el tipo especificado y los datos proporcionados.
    /// </summary>
    /// <param name="tipoGrafico">Tipo de visualización gráfica.</param>
    /// <param name="conjuntoDatos">Colección de elementos a graficar.</param>
    public void DibujarGrafico(SeriesChartType tipoGrafico, List<ElementoDato> conjuntoDatos)
    {
        controlChart.Series.Clear();
        Series seriePrincipal = new Series
        {
            ChartType = tipoGrafico
        };
        controlChart.Series.Add(seriePrincipal);

        for (int idx = 0; idx < conjuntoDatos.Count; idx++)
        {
            string etiqueta = conjuntoDatos[idx].Etiqueta;
            double valor = conjuntoDatos[idx].Cantidad;
            seriePrincipal.Points.AddXY(etiqueta, valor);

            seriePrincipal.Points[idx].LabelToolTip = valor.ToString();
            seriePrincipal.Points[idx].ToolTip = valor.ToString();

            if (tipoGrafico == SeriesChartType.Pie)
            {
                seriePrincipal.Points[idx].Label = "#AXISLABEL (#PERCENT)";
                seriePrincipal["PieLabelStyle"] = "Outside";
                seriePrincipal["PieLineColor"] = "Black";
            }
            else if (tipoGrafico == SeriesChartType.Doughnut)
            {
                seriePrincipal.Points[idx].Label = "#AXISLABEL (#PERCENT)";
                seriePrincipal["PieLabelStyle"] = "Inside";
            }
            else
            {
                seriePrincipal.Points[idx].Label = "(#PERCENT)";
            }

            if (tipoGrafico != SeriesChartType.Pie)
            {
                seriePrincipal.Points[idx].AxisLabel = $"{etiqueta} {valor}";
            }
        }

        controlChart.ChartAreas[0].AxisY.Interval = 10;
        controlChart.ChartAreas[0].AxisX.Interval = 1;
    }
}

En un formulario Windows Forms, se integra el gestor para mostrar diferentes tipos de gráficos. El código del formulario se adapta así:

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;

namespace AplicacionGraficos
{
    public partial class FormularioPrincipal : Form
    {
        private GestorGrafico gestor;
        private List<ElementoDato> listaDatos;
        public FormularioPrincipal()
        InitializeComponent();

        gestor = new GestorGrafico(this.chartControl);
        CargarDatos();
    }

    private void CargarDatos()
    {
        Random generador = new Random();
        listaDatos = new List<ElementoDato>
        {
            new ElementoDato("Ciudad A", generador.Next(50, 100)),
            new ElementoDato("Ciudad B", generador.Next(50, 100)),
            new ElementoDato("Ciudad C", generador.Next(50, 100)),
            new ElementoDato("Ciudad D", generador.Next(50, 100)),
            new ElementoDato("Ciudad E", generador.Next(50, 100))
        };
    }

    private void BotonCircular_Click(object sender, EventArgs e)
    {
        gestor.DibujarGrafico(SeriesChartType.Pie, listaDatos);
    }

    private void BotonBarras_Click(object sender, EventArgs e)
    {
        gestor.DibujarGrafico(SeriesChartType.Column, listaDatos);
    }

    private void BotonLineas_Click(object sender, EventArgs e)
    {
        gestor.DibujarGrafico(SeriesChartType.Line, listaDatos);
    }

    private void BotonBarrasHorizontales_Click(object sender, EventArgs e)
    {
        gestor.DibujarGrafico(SeriesChartType.Bar, listaDatos);
    }

    private void BotonDonut_Click(object sender, EventArgs e)
    {
        gestor.DibujarGrafico(SeriesChartType.Doughnut, listaDatos);
    }

    private void BotonSpline_Click(object sender, EventArgs e)
    {
        gestor.DibujarGrafico(SeriesChartType.Spline, listaDatos);
    }

    private void BotonAreaSpline_Click(object sender, EventArgs e)
    {
        gestor.DibujarGrafico(SeriesChartType.SplineArea, listaDatos);
    }
}
}

Este enfoque permite integrar gráficos de manera fleixble, adaptándose a diversas necesidades de presentación de datos en interfaces de usuario.

Etiquetas: CSharp WinForms ChartControl DataVisualization Graficos

Publicado el 6-12 23:39