Capítulo 41 Manejo básico plotly

(Esta sesión se basa en el manual de plotly.)

Hay dos modos de plotly, el Express (plotly express - px) y los objetos gráficos (graph objects - go). Algo semejante a matplotlib. ¿Por qué usar el segundo si el nombre del primero indica que es más rápido? Hay una serie de consideraciones:

  1. Los lenguajes gráficos que utilizan ciertos tipos de trazado 3D, como las grillas o los isocontornos todavía no son posibles con Plotly Express.

  2. Plotly Express carga los datos en el servidor de plotly.com para devolver la representación gráfica mientras que con el objeto gráfico no ocurre tal cosa. Esto implica que se puede reducir el tiempo de respuesta (latencia).

  3. Los objetos gráficos realizan validación de los datos. Plotly Express no. Si se proporciona un nombre o un valor de propiedad inválido se generará un mensaje de error que describe el problema. (No es el caso si usan diccionarios y listas de Python para construir las figuras.)

  4. Los objetos gráficos contienen descripciones de cada propiedad válida como docstrings de Python, con una referencia completa de la API disponible. Pueden utilizarse estos docstrings en el entorno de desarrollo para conocer las propiedades disponibles como alternativa a una consulta de la Referencia en línea.

  5. Se puede tener acceso a las propiedades de los objetos gráficos mediante la búsqueda de claves tipo diccionario (por ejemplo, fig[“layout”]) o el acceso a propiedades de tipo clase (por ejemplo, fig.layout).

  6. Los objetos gráficos admiten funciones de nivel superior para realizar actualizaciones de figuras ya construidas: .update_layout(), .add_trace(), etc.

  7. Los constructores de los objetos gráficos y los métodos de actualización aceptan lo que denominan “guiones bajos mágicos” (por ejemplo, go.Figure(layout_title_text=“El título”) en lugar de dict(layout=dict(title=dict(text=“El título”)))) para que el código sea más compacto.

  8. Los objetos gráficos soportan funciones adjuntas de renderización .show() y exportación .write_image() que invocan automáticamente las funciones apropiadas del módulo plotly.io.

Estas consideraciones indican que no hay validación de datos en el Express y puede que no exponga la visualización y no se indique la razón.

Las visualizaciones producidas mediante Plotly Express pueden ser construidas desde el principio usando objetos gráficos, pero este enfoque normalmente toma de 5 a 100 líneas de código en lugar de 1.

Veamos una comparación:

Primero mediante plotly express, que automáticamente añade todo lo necesario:

import pandas as pd
import plotly.express as px
df = pd.DataFrame({"Fruta": ["Pitaya", "Kiwi", "Higo", "Pitaya", "Kiwi", "Higo"], "Entrevistado": ["Alex", "Alex", "Alex", "Jacinto", "Jacinto", "Jacinto"], "Puntaje": [9, 10, 3, 10, 7, 2],})
fig1 = px.bar(df, x="Fruta", y="Puntaje", color="Entrevistado", barmode="group", title="Realizado mediante plotly Express")

Ahora mediante graphic objects, que añade elemento a elemento:

# Graph Objects
import plotly.graph_objects as go
fig2 = go.Figure()
def _noop(*args, **kwargs):
    pass
for entrevistado, group in df.groupby("Entrevistado"):
    _noop(fig2.add_trace(go.Bar(x=group["Fruta"], y=group["Puntaje"], name=entrevistado,    hovertemplate="Entrevistado=%s<br>Fruta=%%{x}<br>Puntaje=%%{y}<extra></extra>"% entrevistado)))
_noop(fig2.update_layout(legend_title_text="Entrevistado", title_text="Realizado mediante plotly graphics object", xaxis_title="Fruta", yaxis_title="Puntaje"))

Nota: La estrategia de envolver el comando en la función _noop() se utilizó para lograr la renderización en el formato de libro (bookdown). No es lo estándar.

No se ha explicado aún el paradigma de navegación interactivo de plotly. La imagen @ref(fig:barra_plotly) presenta la barra de funciones.

Barra de funciones interactivas de una visualización plotly

(#fig:barra_plotly)Barra de funciones interactivas de una visualización plotly

De izquierda a derecha:

  • Cámara: Descarga la gráfica como imagen (PNG) con la resolución actual.

  • Lupa (Zoom box): Activa el zoom por recuadro: arrastras para acercar una región.

  • Cruce de flechas (Pan/mover) Activa el desplazamiento: arrastras para mover el lienzo sin cambiar la escala.

  • Recuadro punteado (Box select): Selección rectangular de puntos/trazas; muchas figuras permiten filtrar/aislar lo seleccionado.

  • Lazo (Lasso select): Selección libre dibujando un contorno alrededor de los puntos de interés.

  • Signo “+” (Zoom in): Acerca la vista un paso.

  • Signo “-” (Zoom out): Aleja la vista un paso.

  • Flechas diagonales hacia las esquinas (Autoscale): Ajusta automáticamente los ejes para encuadrar todos los datos visibles.

  • Casa (Reset axes): Restaura los ejes al estado inicial con el que se cargó la figura.

  • Logotipo de barras de Plotly: Abre/enlaza con la página/servicio web de Plotly para editar o ver la figura en línea (si está habilitado) o a la página de Plotly en caso contrario.