Curso Gratuito en Ciencia de Datos y Aprendizaje Automático con Python
Matplotlib
Matplotlib es la principal herramienta de visualización de gráficos científicos en Python. Como todos los grandes proyectos de código abierto, se originó para satisfacer una necesidad personal. En el momento de su creación, John Hunter usó principalmente MATLAB para la visualización científica, pero cuando comenzó a integrar datos de fuentes dispares usando Python, se dio cuenta de que necesitaba una solución de Python para la visualización, por lo que él solo escribió Matplotlib. Desde aquellos primeros años, Matplotlib ha desplazado a los otros métodos competidores para la visualización científica bidimensional y hoy es un proyecto mantenido muy activamente, incluso sin John Hunter, quien lamentablemente falleció en 2012.
John tenía algunos requisitos básicos para Matplotlib: • Los gráficos deben verse con calidad de publicación con un texto atractivo. • Los gráficos deben generar Postscript para su inclusión en documentos L A T E X y una impresión de calidad de publicación. • Los gráficos deben poder integrarse en una interfaz gráfica de usuario (GUI) para el desarrollo de aplicaciones. • El código debe ser principalmente Python para permitir que los usuarios se conviertan en desarrolladores. • Los gráficos deben ser fáciles de hacer con solo unas pocas líneas de código para gráficos simples.
Cada uno de estos requisitos ha sido completamente satisfecho y las capacidades de Matplotlib han crecido mucho más allá de estos requisitos. Al principio, para facilitar la transición de MATLAB a Python, muchas de las funciones de Matplotlib se nombraron de cerca después de los comandos de MATLAB correspondientes. La comunidad se ha alejado de este estilo y, aunque todavía puede encontrar el antiguo estilo MATLAB-esque utilizado en la documentación en línea de Matplotlib.
A continuación se muestra la forma más rápida de dibujar un diagrama utilizando Matplotlib y el intérprete simple de Python. Más adelante, veremos cómo hacer esto aún más rápido usando IPython. La primera línea importa el módulo requerido como plt, que es la convención recomendada. La siguiente línea traza una secuencia de números generada usando el objeto de rango de Python . Tenga en cuenta que la lista de salida contiene un objeto Line2D . Este es un artista en el lenguaje de Matplotlib. Finalmente, la función plt.show () dibuja el gráfico en una ventana de figura GUI.
code
Si intenta esto en su propio intérprete de Python simple (¡y debería hacerlo!), Verá que no puede escribir nada más en el intérprete hasta que se cierre la ventana de la figura (es decir, algo como la Fig. 1.1 ). Esto se debe a que la función plt.show () preocupa al intérprete con los controles en la GUI y bloquea la interacción adicional. Como discutimos a continuación, IPython proporciona formas de sortear este bloqueo para que pueda interactuar simultáneamente con el intérprete y la ventana de la figura. 3
3 También puede hacer esto en el intérprete simple de Python haciendo import matplotlib; matplotlib. interactivo (verdadero) .
Como se muestra en la figura 1.1 , la función de trazado devuelve una lista que contiene el objeto Line2D . Las tramas más complicadas producen listas más grandes llenas de artistas . La terminología es que los artistas dibujan sobre el lienzo contenido en la figura de Matplotlib. La última línea es la función plt.show que provoca que los artistas incrustados rendericen en el lienzo de Matplotlib. La razón por la que esta es una función separada es que las tramas pueden tener docenas de artistas complicados y la representación puede ser una tarea que requiere mucho tiempo y que solo se realiza en el final, cuando todos los artistas hayan sido reunidos. Matplotlib admite el trazado de imágenes, contornos y muchos otros que cubrimos en detalle en los siguientes capítulos.
gráfica
Aunque esta es la forma más rápida de dibujar una gráfica en Matplotlib, no se recomienda porque no hay identificadores para los productos intermedios de la gráfica, como el eje de la gráfica. Si bien esto está bien para una trama simple como esta, más adelante veremos cómo construir tramas complicadas usando el método recomendado.
Una de las mejores formas de comenzar con Matplotlib es navegar por la extensa galería en línea de parcelas en el sitio principal de Matplotlib. Cada parcela viene con el código fuente correspondiente que puede usar como punto de partida para sus propias parcelas. En la secc. 1.4 , discutimos comandos mágicos especiales que lo hacen particularmente fácil. El concurso anual John Hunter: Excellence in Plotting Contest proporciona fantásticos y convincentes ejemplos de visualizaciones científicas que son posibles con Matplotlib.
Alternativas a Matplotlib
Aunque Matplotlib es la opción más completa para el trazado basado en guiones , existen algunas alternativas para gráficos científicos especializados que pueden ser de interés.
Si necesita visualización de datos en tiempo real y herramientas para la representación de datos volumétricos y mallas 3D complicadas con isosuperficies, PyQtGraph es una opción. PyQtGraph es una biblioteca de GUI y gráficos de Python puro que depende de los enlaces de Python para la biblioteca de GUI de Qt (es decir, PySide o PyQt4 ) y Numpy. Esto significa que PyQtGraph se basa en estas otras bibliotecas (especialmente en el marco GraphicsView de Qt ) para el procesamiento y procesamiento de números de alta resistencia . Este paquete se mantiene activamente, con documentación sólida. También necesita comprender algunos conceptos de desarrollo de Qt-GUI para usar esto de manera efectiva.
Una alternativa que viene de la R comunidad es ggplot que es un puerto del pitón de la ggplot2 paquete que es fundamental para los gráficos estadísticos en R . Desde el punto de vista de Python, la principal ventaja de ggplot es la estrecha integración con el marco de datos de Pandas, lo que facilita la elaboración de gráficos estadísticos con un bonito formato. La desventaja de este paquete es que aplica una semántica no pitónica basada en la gramática de los gráficos [ 2 ], que sin embargo es un método bien pensado para articular gráficos complicados. Por supuesto, porque hay dos víaspuentes entre Python y R a través del módulo R2Py (entre otros), es factible enviar matrices Numpy a R para la representación nativa de ggplot2 y luego recuperar el gráfico así calculado en Python. Este es un flujo de trabajo que es lubricado por Jupyter Notebook (ver más abajo) a través de la extensión rmagic . Por lo tanto, es muy posible obtener lo mejor de ambos mundos a través del Jupyter Notebook y este tipo de flujo de trabajo en varios idiomas es bastante común en las comunidades de análisis de datos.
Extensiones de Matplotlib
Inicialmente, para fomentar la adopción de Matplotlib de MATLAB, muchas de las sensibilidades gráficas se adoptaron de MATLAB para preservar la apariencia de los usuarios en transición. Las sensibilidades modernas y los gráficos predeterminados más bonitos son posibles porque Matplotlib brinda la capacidad de profundizar y ajustar cada elemento en el lienzo. Sin embargo, esto puede ser tedioso y varias alternativas ofrecen alivio. Para los gráficos estadísticos, el primer lugar para buscar es el módulo seaborn que incluye una amplia gama de gráficos bellamente formateados que incluyen gráficos de violín, gráficos de densidad de kernel e histogramas bivariados. La galería seaborn incluye muestras de parcelas disponibles y el código correspondiente que las genera. Tenga en cuenta que la importación de seabornsecuestra la configuración predeterminada para todos los gráficos, por lo que debe coordinar esto si solo desea usar seaborn para algunas (no todas) de sus visualizaciones en una sesión determinada. Tenga en cuenta que puede encontrar los valores predeterminados para Matplotlib en el diccionario matplotlib.rcParams .