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.