Salta el contingut
 

Visualització de les dades amb Plotnine

Autor: Joan Puigcerver Ibáñez

Correu electrònic: j.puigcerveribanez@edu.gva.es

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

Visualització de les dades amb Plotnine

plotnine és una llibreria de Python que permet crear gràfics de dades de manera senzilla i elegant, inspirada en la llibreria de R ggplot2.

Altres llibreries de Python per a la visualització de dades són:

Instal·lació

Per instal·lar la llibreria plotnine amb pip:

pip install plotnine

Importació

Per importar la llibreria plotnine:

from plotnine import *

Utilització

La llibreria es basa en diferents objectes per a la creació de gràfics:

  • ggplot: objecte principal que conté les dades i les capes del gràfic.
  • aes: objecte que defineix les variables estètiques del gràfic.
  • geom: objecte que defineix la geometria del gràfic.
  • theme: objecte que defineix el tema del gràfic.

Documentació

Documentació oficial de plotnine

Exemple

from plotnine import ggplot, geom_point, aes
from plotnine.data import mtcars

print("Dades `mtcars`:")
print(mtcars)

plot = (
    ggplot(mtcars)
    + aes("wt", "mpg", color="factor(gear)")
    + geom_point()
)

plot.show()

Exemple bàsic amb plotnine

Figura 1. Exemple bàsic amb plotnine.

  1. Creació d'un objecte ggplot amb les dades mtcars.
  2. Definició de les variables estètiques amb aes.
    • Sobre l'eix X: wt (pes del vehicle).
    • Sobre l'eix Y: mpg (consum del vehicle).
    • Color: gear (nombre de marxes).
  3. Definició de la geometria amb geom_point.
    • Cada punt representa un vehicle.

Estètica (aes)

L'estètica control les propietats visuals d'una gràfica. Aquestes funcions controlen com es mostren i distribueixen les dades (i els càlculs basats en aquestes).

La funció principal per a definir l'estètica és aes.

aes(x, y, **kwargs)
  • x: dades utilitzades per a l'eix X.
  • y: dades utilitzades per a l'eix Y.

Info

Els paràmetres x i y poden rebre múltiples tipus de dades. Podeu consultar-ho a la documentació oficial.

Documentació

Documentació oficial de la aes.

Altres paràmetres comuns són:

  • color: color dels elements.
  • fill: color de fons dels elements.

Geometria (geom)

La geometria controla el format amb que es presenten les dades.

Documentació

Documentació oficial de la geometria.

plotnine ofereix diferents tipus de geometries, que venen definides per funcions amb el prefix geom_. Podeu consultar la llista completa a la documentació oficial.

Els tipus de geometries més comuns són:

Exemple amb punts

La Figura 1 mostra un exemple bàsic amb geom_point.

Exemple amb línies

Info

La funció factor() converteix una variable numèrica en una variable categòrica.

plot = (
    ggplot(mtcars)
    + aes("wt", "mpg", color="factor(gear)")
    + geom_line()
)

plot.show()

Exemple amb línies

Figura 2. Exemple bàsic amb geom_line.

Exemple amb barres

bar_plot = (
    ggplot(mtcars)
    + aes(x='factor(cyl)', fill='factor(gear)')
    + geom_bar()
)

bar_plot.show()

Exemple amb barres

Figura 3. Exemple bàsic amb geom_bar.

Títol i etiquetes

Es pot especificar el títol del gràfic amb la funció ggtitle.

Documentació

Documentació oficial de la funció ggtitle.

També es pot afegir etiquetes als eixos X i Y amb les funcions:

  • labs: Permet especificar el títol i les etiquetes dels eixos X i Y i altres elements.
  • xlab: etiqueta de l'eix X.
  • ylab: etiqueta de l'eix Y.

Exemple amb títol i etiquetes

plot = (
    ggplot(mtcars)
    + aes("wt", "mpg", color="factor(gear)")
    + geom_point()
    + labs(title="Consum (wt) vs Pes (mpg)",
           x="Pes en lliures",
           y="Consum en milles per galó",
           color="Nombre de marxes"
    )
)

plot.show()

Exemple amb títol i etiquetes

Figura 4. Exemple amb títol i etiquetes.

Temes

Es poden utilitzar diferents temes per a personalitzar l'aparença del gràfic.

Documentació

Documentació oficial dels temes.

Per a utilitzar un tema, s'ha d'afegir la funció theme al gràfic.

Exemple amb el tema fosc

plot = (
    ggplot(mtcars)
    + aes("wt", "mpg", color="factor(gear)")
    + geom_point()
    + labs(title="Consum (wt) vs Pes (mpg)",
           x="Pes en lliures",
           y="Consum en milles per galó",
           color="Nombre de marxes"
    )
    + theme_dark()
)

plot.show()

Exemple amb tema fosc

Figura 5. Exemple amb tema fosc.

Múltiples gràfics (facets)

Els gràfics poden ser dividits en diferents subgràfics segons els valors d'una variable amb dues funcions:

  • facet_wrap: divideix el gràfic en subgràfics en funció d'una variable.
  • facet_grid: divideix el gràfic en subgràfics en funció de dues o més variables.

Exemple amb facet_wrap

facet_plot = (
    ggplot(mtcars)
    + aes("wt", "mpg", color="factor(gear)")
    + geom_point()
    + facet_wrap("gear")
    + labs(title="Consum (wt) vs Pes (mpg)",
        x="Pes en lliures",
        y="Consum en milles per galó",
        color="Nombre de marxes"
    )
)
facet_plot.show()

Diferents gràfics per nombre de marxes

Figura 6. Diferents gràfics per nombre de marxes.

Exemple amb facet_grid

facet_grid_plot = (
    ggplot(mtcars)
    + aes("wt", "mpg", color="factor(gear)")
    + geom_point()
    + facet_grid("gear", "cyl", labeller="label_both")
    + labs(title="Consum (wt) vs Pes (mpg)",
           x="Pes en lliures",
           y="Consum en milles per galó",
           color="Nombre de marxes"
    )
)
facet_grid_plot.show()

Diferents gràfics per nombre de marxes i cilindres

Figura 7. Diferents gràfics per nombre de marxes i cilindres.

Codi font

plotnine_example.py
#!/usr/bin/env python

from plotnine import *
from plotnine.data import mtcars

print("Dades `mtcars`:")
print(mtcars)

def regular_plot():
    plot = (
        ggplot(mtcars)
        + aes("wt", "mpg", color="factor(gear)")
        + geom_point()
        + labs(title="Consum (wt) vs Pes (mpg)",
               x="Pes en lliures",
               y="Consum en milles per galó",
               color="Nombre de marxes"
        )
        + theme_dark()
    )

    plot.show()

def line_plot():
    line_plot = (
        ggplot(mtcars)
        + aes(x='wt', y='mpg', color='factor(gear)')
        + geom_line()
    )

    line_plot.show()

def bar_plot():
    bar_plot = (
        ggplot(mtcars)
        + aes(x='factor(cyl)', fill='factor(gear)')
        + geom_bar()
    )

    bar_plot.show()

def facet_wrap_plot():
    facet_plot = (
        ggplot(mtcars)
        + aes("wt", "mpg", color="factor(gear)")
        + geom_point()
        + facet_wrap("gear")
        + labs(title="Consum (wt) vs Pes (mpg)",
               x="Pes en lliures",
               y="Consum en milles per galó",
               color="Nombre de marxes"
        )
    )

    facet_plot.show()

def facet_grid_plot():
    facet_grid_plot = (
        ggplot(mtcars)
        + aes("wt", "mpg", color="factor(gear)")
        + geom_point()
        + facet_grid("gear", "cyl", labeller="label_both")
        + labs(title="Consum (wt) vs Pes (mpg)",
               x="Pes en lliures",
               y="Consum en milles per galó",
               color="Nombre de marxes"
        )
    )

    facet_grid_plot.show()

# simple_plot()
# line_plot()
# bar_plot()
# facet_wrap_plot()
facet_grid_plot()

Bibliografia

Comentaris