[Xamarin] Gráficas con Oxyplot

ChartIntroducción

En ocasiones en nuestras aplicaciones tendremos la necesidad de mostrar al usuario cierta información de la manera más directa y sencilla posible de modo que de un solo vistazo el usuario sea capaz de obtener la mayor información posible. A nivel de interfaz tenemos muchísimas opciones muy interesantes sin embargo, un excelente recurso muy utilizado para este tipo de situaciones es el uso de gráficas. Por ejemplo, estamos realizando una aplicación de compra de viviendas. Sería fantástico mostrarle al usuario la información de como ha oscilado el precio de la viviendo en el último trimestre por ejemplo. ¿Como lo hacemos?, ¿Que piensas que sería lo más acertado?. Posiblemente una gráfica de barras u otra similar te haya pasado por la mente.

En esta entrada vamos a aprender como utilizar gráficas en nuestras aplicaciones Xamarin utilizando OxyPlot.

Añadiendo las dependencias necesarias

Tras crear la solución Xamarin.Forms, comenzamos añadiendo las dependencias necesarias. Hacemos clic secundario sobre la solución, Administrar paquetes NuGet para la solución…

Añadir paquetes NuGet

Buscamos por Oxyplot.Xamarin.Forms:

Oxyplot.Xamarin.Forms

Inciando renderers Oxyplot

Es necesario añadir código específico en cada plataforma para inicializar renderers de Oxyplot.

iOS

Utilizamos el método FinishedLaunching del delegado de la aplicación:

OxyPlot.Xamarin.Forms.Platform.iOS.PlotViewRenderer.Init();

Android

En el método OnCreate de la actividad principal debemos añadir:

OxyPlot.Xamarin.Forms.Platform.Android.PlotViewRenderer.Init();

Windows

En este caso, en la clase App.xaml.cs, donde se define Application en Windows, utilizamos el método OnLaunched:

OxyPlot.Xamarin.Forms.Platform.UWP.PlotViewRenderer.Init();

PlotView

Tras inicializar OxyPlot, estamos preparados para comenzar a trabajar con la librería. OxyPlot cuenta con un control llamado PlotView. Este control se encuentra disponible en el namespace XAML:

xmlns:oxyplot="clr-namespace:OxyPlot.Xamarin.Forms;assembly=OxyPlot.Xamarin.Forms"

El control cuenta con una propiedad fundamental Model de tipo PlotModel:

<AbsoluteLayout>
     <oxyplot:PlotView
          AbsoluteLayout.LayoutFlags="All"
          AbsoluteLayout.LayoutBounds="0, 0, 1, 1"
          Model="{Binding PlotModel}" />
</AbsoluteLayout>

PlotModel define el origen de la fuente de información de la gráfica así como, información relacionada con el tipo de gráfica.

Enlazar datos

A nivel de ViewModel, necesitamos definir una propiedad de tipo PlotModel:

private PlotModel _plotModel;

Propiedad pública:

public PlotModel PlotModel
{
     get { return _plotModel; }
     set
     {
          _plotModel = value;
          RaisePropertyChanged();
     }
}

PlotModel cuenta con diferentes propiedades que permiten definir el renderizado de la gráfica. Tenemos desde propiedades sencillas y comunes como Title que permite definir el título de la gráfica a otras más complejas como Series.

La propiedad Series espera un valor de tipo OxyPlot.Series. Esta propiedad permite definir el tipo de gráfica a utilizar.

Veamos un sencillo ejemplo para crear una gráfica de columnas utilizando ColumnSeries:

PlotModel = new PlotModel
{
     Title = "Column"
};

var columnSerie = new ColumnSeries
{
     StrokeThickness = 2.0
};

columnSerie.Items.Add(new ColumnItem(1));
columnSerie.Items.Add(new ColumnItem(2));
columnSerie.Items.Add(new ColumnItem(3));
columnSerie.Items.Add(new ColumnItem(4));
columnSerie.Items.Add(new ColumnItem(5));

PlotModel.Series.Add(columnSerie);

El resultado:

Gráfica de columnas

Tipos de gráficas

Tenemos una enome variedad de tipos de gráficas diferentes:

  • Área
  • Líneas
  • Barras
  • Columnas
  • Puntos
  • Circular
  • Mapa de calor
  • Etc

Además se pueden realizar composiciones haciendo combinaciones de varias de ellas, por ejemplo, barras con líneas.

Tenéis el código fuente del ejemplo utilizado disponible en GitHub:

Ver GitHub

Recuerda, cualquier tipo de duda o sugerencia es bienvenida en los comentario del artículo.

Más información

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *