Crear rellenos de polígonos 3D para gráficos de líneas

Beginner

This tutorial is from open-source community. Access the source code

Introducción

En este tutorial, aprenderemos cómo crear polígonos que llenen el espacio debajo de un gráfico de líneas en una trama 3D utilizando la librería Matplotlib de Python. Los polígonos serán semi-transparentes, creando una especie de efecto de 'vidrio de colores con bordes dentados'.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de operaciones no puede automatizarse debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje su retroalimentación después de la sesión y resolveremos rápidamente el problema para usted.

Importar las bibliotecas necesarias

Comenzaremos importando las bibliotecas necesarias.

import math
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.collections import PolyCollection

Definir la función del polígono debajo del gráfico

A continuación, definimos una función polygon_under_graph(x, y) que construye la lista de vértices que define el polígono que llena el espacio debajo del gráfico de líneas (x, y). Esta función asume que x está en orden ascendente.

def polygon_under_graph(x, y):
    """
    Construye la lista de vértices que define el polígono que llena el espacio debajo
    del gráfico de líneas (x, y). Esto asume que x está en orden ascendente.
    """
    return [(x[0], 0.), *zip(x, y), (x[-1], 0.)]

Crear la trama 3D

Ahora crearemos una trama 3D utilizando Matplotlib.

ax = plt.figure().add_subplot(projection='3d')

Definir las matrices de x y lambda

Definimos las matrices de x y lambda utilizando las funciones linspace y range respectivamente.

x = np.linspace(0., 10., 31)
lambdas = range(1, 9)

Calcular los vértices y los colores de las caras

Calculamos los vértices y los colores de las caras utilizando las funciones vectorize y colormaps de Matplotlib.

## verts[i] es una lista de pares (x, y) que definen el polígono i.
gamma = np.vectorize(math.gamma)
verts = [polygon_under_graph(x, l**x * np.exp(-l) / gamma(x + 1))
         for l in lambdas]
facecolors = plt.colormaps['viridis_r'](np.linspace(0, 1, len(verts)))

Crear los polígonos y agregarlos a la trama

Creamos los polígonos utilizando la función PolyCollection de Matplotlib y los agregamos a la trama.

poly = PolyCollection(verts, facecolors=facecolors, alpha=.7)
ax.add_collection3d(poly, zs=lambdas, zdir='y')

Establecer los límites y etiquetas de la trama

Finalmente, establecemos los límites y etiquetas de la trama utilizando la función set.

ax.set(xlim=(0, 10), ylim=(1, 9), zlim=(0, 0.35),
       xlabel='x', ylabel=r'$\lambda$', zlabel='probability')

Mostrar la trama

Mostramos la trama utilizando la función show.

plt.show()

Resumen

En este tutorial, aprendimos cómo crear polígonos que llenan el espacio debajo de un gráfico de líneas en una trama 3D utilizando la biblioteca Matplotlib de Python. Utilizamos la función PolyCollection para crear los polígonos y establecimos los límites y etiquetas de la trama utilizando la función set.