Visualización de datos de Python con Matplotlib

    Introducción

    La visualización de tendencias de datos es una de las tareas más importantes en la ciencia de datos y el Machine Learning. La elección de algoritmos de minería de datos y Machine Learning depende en gran medida de los patrones identificados en el conjunto de datos durante la fase de visualización de datos. En este artículo, veremos cómo podemos realizar diferentes tipos de visualizaciones de datos en Python. Usaremos Python Biblioteca matplotlib que es el estándar de facto para la visualización de datos en Python.

    El artículo Una breve introducción a Matplotlib para visualización de datos proporciona una introducción de muy alto nivel a la biblioteca de Matplot y explica cómo dibujar diagramas de dispersión, diagramas de barras, histogramas, etc. En este artículo, exploraremos más funcionalidades de Matplotlib.

    Cambio del tamaño de parcela predeterminado

    Lo primero que haremos será cambiar el tamaño de la parcela por defecto. De forma predeterminada, el tamaño de las parcelas de Matplotlib es de 6 x 4 pulgadas. El tamaño predeterminado de las parcelas se puede verificar usando este comando:

    import matplotlib.pyplot as plt
    
    print(plt.rcParams.get('figure.figsize'))
    

    Para una mejor vista, es posible que deba cambiar el tamaño predeterminado del gráfico Matplotlib. Para hacerlo, puede utilizar el siguiente script:

    fig_size = plt.rcParams["figure.figsize"]
    fig_size[0] = 10
    fig_size[1] = 8
    plt.rcParams["figure.figsize"] = fig_size
    

    La secuencia de comandos anterior cambia el tamaño predeterminado de los gráficos de Matplotlib a 10 x 8 pulgadas.

    Comencemos nuestra discusión con un diagrama de línea simple.

    Gráfico de línea

    La gráfica de línea es la gráfica más básica de Matplotlib. Se puede utilizar para trazar cualquier función. Tracemos un diagrama de línea para la función del cubo. Eche un vistazo al siguiente guión:

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(-10, 9, 20)
    
    y = x ** 3
    
    plt.plot(x, y, 'b')
    plt.xlabel('X axis')
    plt.ylabel('Y axis')
    plt.title('Cube Function')
    plt.show()
    

    En el script anterior, primero importamos el pyplot clase de la biblioteca Matplotlib. Tenemos dos numpy matrices x y y en nuestro guión. Usamos el linspace método del numpy biblioteca para crear una lista de 20 números entre -10 y 9 positivos. Luego tomamos la raíz cúbica de todos los números y asignamos el resultado a la variable y. Para trazar dos numpy matrices, simplemente puede pasarlas al plot método del pyplot clase de la biblioteca Matplotlib. Puedes usar el xlabel, ylabel y title atributos de la pyplot class para etiquetar el eje x, el eje y y el título del gráfico. La salida del script anterior se ve así:

    Salida:

    Crear varias parcelas

    De hecho, puede crear más de una parcela en un lienzo usando Matplotlib. Para hacerlo, debe utilizar el subplot función que especifica la ubicación y el número de parcela. Eche un vistazo al siguiente ejemplo:

    import matplotlib.pyplot as plt
    import numpy as np
    x = np.linspace(-10, 9, 20)
    
    y = x ** 3
    
    plt.subplot(2,2,1)
    plt.plot(x, y, 'b*-')
    plt.subplot(2,2,2)
    plt.plot(x, y, 'y--')
    plt.subplot(2,2,3)
    plt.plot(x, y, 'b*-')
    plt.subplot(2,2,4)
    plt.plot(x, y, 'y--')
    

    El primer atributo del subplot función son las filas que tendrán las subparcelas y la segunda especie de parámetro el número de columnas para la subparcela. Un valor de 2,2 especies que habrá cuatro gráficos. El tercer argumento es la posición en la que se mostrará el gráfico. Las posiciones comienzan desde la parte superior izquierda. El gráfico con la posición 1 se mostrará en la primera fila y en la primera columna. De manera similar, el gráfico con la posición 2 se mostrará en la primera fila y en la segunda columna.

    Eche un vistazo al tercer argumento de la plot función. Este argumento define la forma y el color del marcador en el gráfico.

    Salida:

    Trazado de forma orientada a objetos

    En la sección anterior usamos el plot método del pyplot class y pasarle los valores para las coordenadas xey junto con las etiquetas. Sin embargo, en Python se puede dibujar el mismo gráfico de forma orientada a objetos. Eche un vistazo al siguiente guión:

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(-10, 9, 20)
    
    y = x ** 3
    
    figure = plt.figure()
    
    axes = figure.add_axes([0.2, 0.2, 0.8, 0.8])
    

    los figure método llamado usando pyplot devoluciones de clase figure objeto. Puedes llamar add_axes método usando este objeto. Los parámetros pasados ​​al add_axes El método son la distancia desde la izquierda y la parte inferior del eje predeterminado y el ancho y alto del eje, respectivamente. El valor de estos parámetros debe mencionarse como una fracción del tamaño de la figura predeterminado. La ejecución del script anterior crea un eje vacío como se muestra en la siguiente figura:

    La salida del script anterior se ve así:

    Tenemos nuestro eje, ahora podemos agregar datos y etiquetas a este eje. Para agregar los datos, necesitamos llamar al plot función y pasarle nuestros datos. De manera similar, para crear etiquetas para el eje x, el eje y y para el título, podemos usar el set_xlabel, set_ylabel y set_title funciona como se muestra a continuación:

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(-10, 9, 20)
    
    y = x ** 3
    
    figure = plt.figure()
    
    axes = figure.add_axes([0.2, 0.2, 0.8, 0.8])
    
    axes.plot(x, y, 'b')
    axes.set_xlabel('X Axis')
    axes.set_ylabel('Y Axis')
    axes.set_title('Cube function')
    

    Puede ver que el resultado es similar al que obtuvimos en la última sección, pero esta vez usamos el enfoque orientado a objetos.

    Puede agregar tantos ejes como desee en un gráfico usando el add_axes método. Eche un vistazo al siguiente ejemplo:

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(-10, 9, 20)
    
    y = x ** 3
    
    z = x ** 2
    
    figure = plt.figure()
    
    axes = figure.add_axes([0.0, 0.0, 0.9, 0.9])
    axes2 = figure.add_axes([0.07, 0.55, 0.35, 0.3]) # inset axes
    
    axes.plot(x, y, 'b')
    axes.set_xlabel('X Axis')
    axes.set_ylabel('Y Axis')
    axes.set_title('Cube function')
    
    axes2.plot(x, z, 'r')
    axes2.set_xlabel('X Axis')
    axes2.set_ylabel('Y Axis')
    axes2.set_title('Square function')
    

    Eche un vistazo a la secuencia de comandos de arriba. En el script de arriba tenemos dos ejes. El primer eje contiene gráficos de la raíz cúbica de la entrada, mientras que el segundo eje dibuja el gráfico de la raíz cuadrada de los mismos datos dentro del otro gráfico para el eje cúbico.

    En este ejemplo, comprenderá mejor la función de los parámetros para la izquierda, la parte inferior, el ancho y la altura. En el primer eje, los valores para la izquierda y la parte inferior se establecen en cero, mientras que el valor para el ancho y la altura se establecen en 0.9, lo que significa que nuestro eje exterior tendrá el 90% de ancho y alto del eje predeterminado.

    Para el segundo eje, el valor de la izquierda se establece en 0.07, para la parte inferior se establece en 0.55, mientras que el ancho y la altura son 0.35 y 0.3 respectivamente. Si ejecuta el script anterior, verá un gráfico grande para la función del cubo mientras que un gráfico pequeño para una función cuadrada que se encuentra dentro del gráfico del cubo. La salida se ve así:

    Subparcelas

    Otra forma de crear más de una parcela a la vez es utilizar subplot método. Necesita pasar los valores para el nrow y ncols parámetros. El número total de parcelas generadas será nrow x ncols. Echemos un vistazo a un ejemplo sencillo. Ejecute el siguiente script:

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(-10, 9, 20)
    
    y = x ** 3
    
    z = x ** 2
    
    fig, axes = plt.subplots(nrows=2, ncols=3)
    

    En el resultado, verá 6 gráficos en 2 filas y 3 columnas como se muestra a continuación:

    A continuación, usaremos un ciclo para agregar la salida de la función cuadrada a cada uno de estos gráficos. Eche un vistazo al siguiente guión:

    import matplotlib.pyplot as plt
    import numpy as np
    x = np.linspace(-10, 9, 20)
    
    z = x ** 2
    
    figure, axes = plt.subplots(nrows=2, ncols=3)
    
    for rows in axes:
        for ax1 in rows:
            ax1.plot(x, z, 'b')
            ax1.set_xlabel('X - axis')
            ax1.set_ylabel('Y - axis')
            ax1.set_title('Square Function')
    

    En el script anterior, iteramos sobre los ejes devueltos por el subplots función y mostrar la salida de la función cuadrada en cada eje. Recuerde, dado que tenemos ejes en 2 filas y tres columnas, tenemos que ejecutar un ciclo anidado para iterar a través de todos los ejes. El bucle for externo itera a través de los ejes en filas, mientras que el bucle for interno itera a través del eje en columnas. La salida del script anterior se ve así:

    En la salida, puede ver las seis gráficas con funciones cuadradas.

    Cambiar el tamaño de la figura para una parcela

    Además de cambiar el tamaño predeterminado del gráfico, también puede cambiar el tamaño de la figura para gráficos específicos. Para hacerlo, debe pasar un valor para el figsize parámetro de la subplots función. El valor de la figsize El parámetro debe pasarse en forma de tupla donde el primer valor corresponde al ancho mientras que el segundo valor corresponde a la altura del gráfico. Mire el siguiente ejemplo para ver cómo cambiar el tamaño de una parcela específica:

    import matplotlib.pyplot as plt
    import numpy as np
    x = np.linspace(-10, 9, 20)
    
    y = x ** 3
    
    z = x ** 2
    
    figure, axes = plt.subplots(figsize = (6,8))
    
    axes.plot(x, z, 'r')
    axes.set_xlabel('X-Axis')
    axes.set_ylabel('Y-Axis')
    axes.set_title('Square Function')
    

    En la secuencia de comandos anterior, dibuje un diagrama para la función cuadrada que tenga 6 pulgadas de ancho y 8 pulgadas de alto. La salida se ve así:

    Agregar leyendas

    Agregar leyendas a una trama es muy sencillo con la biblioteca Matplotlib. Todo lo que tiene que hacer es pasar el valor del label parámetro de la plot función. Luego, después de llamar al plot función, solo necesita llamar al legend función. Eche un vistazo al siguiente ejemplo:

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(-10, 9, 20)
    
    y = x ** 3
    
    z = x ** 2
    
    figure = plt.figure()
    
    axes = figure.add_axes([0,0,1,1])
    
    axes.plot(x, z, label="Square Function")
    axes.plot(x, y, label="Cube Function")
    axes.legend()
    

    En el script anterior, definimos dos funciones: cuadrado y cubo usando variables x, y y z. A continuación, primero graficamos la función cuadrada y para el label parámetro, pasamos el valor Square Function. Este será el valor mostrado en la etiqueta para la función cuadrada. A continuación, trazamos la función del cubo y pasamos Cube Function como valor para el label parámetro. La salida se ve así:

    En la salida, puede ver una leyenda en la esquina superior izquierda.

    La posición de la leyenda se puede cambiar pasando un valor para loc parámetro de la legend función. Los valores posibles pueden ser 1 (para la esquina superior derecha), 2 (para la esquina superior izquierda), 3 (para la esquina inferior izquierda) y 4 (para la esquina inferior derecha). Dibujemos una leyenda en la esquina inferior derecha del gráfico. Ejecute el siguiente script:

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(-10, 9, 20)
    
    y = x ** 3
    
    z = x ** 2
    
    figure = plt.figure()
    
    axes = figure.add_axes([0,0,1,1])
    
    axes.plot(x, z, label="Square Function")
    axes.plot(x, y, label="Cube Function")
    axes.legend(loc=4)
    

    Salida:

    Opciones de color

    Hay varias opciones para cambiar el color y los estilos de los gráficos. La forma más sencilla es pasar la primera letra del color como tercer argumento como se muestra en el siguiente script:

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(-10, 9, 20)
    
    y = x ** 3
    
    z = x ** 2
    
    figure = plt.figure()
    
    axes = figure.add_axes([0,0,1,1])
    
    axes.plot(x, z, "r" ,label="Square Function")
    axes.plot(x, y, "g", label="Cube Function")
    axes.legend(loc=4)
    

    En el script anterior, se ha pasado una cadena «r» como tercer parámetro para el primer gráfico. Para el segundo gráfico, la cadena «g» se ha pasado al tercer parámetro. En la salida, el primer gráfico se imprimirá con una línea sólida roja, mientras que el segundo gráfico se imprimirá con una línea sólida verde como se muestra a continuación:

    Otra forma de cambiar el color del gráfico es hacer uso de la color parámetro. Puede pasar el nombre del color o el valor hexadecimal del color al color parámetro. Eche un vistazo al siguiente ejemplo:

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(-10, 9, 20)
    
    y = x ** 3
    
    z = x ** 2
    
    figure = plt.figure()
    
    axes = figure.add_axes([0,0,1,1])
    
    axes.plot(x, z, color = "purple" ,label="Square Function")
    axes.plot(x, y, color = "#FF0000", label="Cube Function")
    axes.legend(loc=4)
    

    Salida:

    Gráfico de pila

    El gráfico de pila es una extensión del gráfico de barras o gráfico de líneas que desglosa los datos de diferentes categorías y los apila para que la comparación entre los valores de diferentes categorías se pueda realizar fácilmente.

    Supongamos que desea comparar los goles anotados por tres jugadores de fútbol diferentes por año durante los últimos 8 años, puede crear un diagrama de pila usando Matplot usando el siguiente script:

    import matplotlib.pyplot as plt
    
    year = [2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018]
    
    player1 = [8,10,17,15,23,18,24,29]
    player2 = [10,14,19,16,25,20,26,32]
    player3 = [12,17,21,19,26,22,28,35]
    
    plt.plot([],[], color="y", label="player1")
    plt.plot([],[], color="r", label="player2")
    plt.plot([],[], color="b", label="player3 ")
    
    plt.stackplot(year, player1, player2, player3, colors = ['y','r','b'])
    plt.legend()
    plt.title('Goals by three players')
    plt.xlabel('year')
    plt.ylabel('Goals')
    plt.show()
    

    Salida:

    Para crear un diagrama de pila usando Python, simplemente puede usar el stackplot clase de la biblioteca Matplotlib. Los valores que desea mostrar se pasan como primer parámetro a la clase y los valores que se apilarán en el eje horizontal se muestran como segundo parámetro, tercer parámetro y así sucesivamente. También puede establecer el color para cada categoría utilizando el colors atributo.

    Gráfico circular

    Un tipo de pastel es un gráfico circular en el que se marcan diferentes categorías como parte del círculo. Cuanto mayor sea la participación de la categoría, mayor será la parte que ocupará en el gráfico.

    Dibujemos un gráfico circular simple de los goles marcados por un equipo de fútbol a partir de tiros libres, penales y goles de campo. Eche un vistazo al siguiente guión:

    import matplotlib.pyplot as plt
    
    goal_types="Penalties", 'Field Goals', 'Free Kicks'
    
    goals = [12,38,7]
    colors = ['y','r','b']
    
    plt.pie(goals, labels = goal_types, colors=colors ,shadow = True, explode = (0.05, 0.05, 0.05), autopct="%1.1f%%")
    plt.axis('equal')
    
    plt.show()
    

    Salida:

    Para crear un gráfico circular en Matplot lib, el pie se utiliza la clase. El primer parámetro del constructor de clases es la lista de números para cada categoría. La lista de categorías separadas por comas se pasa como argumento al labels atributo. La lista de colores para cada categoría se pasa al colors atributo. Si se establece en verdadero, shadow El atributo crea sombras alrededor de diferentes categorías en el gráfico circular. Finalmente, el explode El atributo divide el gráfico circular en partes individuales.

    Es importante mencionar aquí que no es necesario pasar el porcentaje para cada categoría; en su lugar, solo tiene que pasar los valores y el porcentaje para los gráficos circulares se calculará automáticamente.

    Guardar un gráfico

    Guardar un gráfico es muy fácil en Matplotlib. Todo lo que tienes que hacer es llamar al savefig método del figure object y pásele la ruta del archivo con el que desea que se guarde su gráfico. Eche un vistazo al siguiente ejemplo:

    import matplotlib.pyplot as plt
    import numpy as np
    x = np.linspace(-10, 9, 20)
    
    y = x ** 3
    
    z = x ** 2
    
    figure, axes = plt.subplots(figsize = (6,8))
    
    axes.plot(x, z, 'r')
    axes.set_xlabel('X-Axis')
    axes.set_ylabel('Y-Axis')
    axes.set_title('Square Function')
    
    figure.savefig(r'E:/fig1.jpg')
    

    El script anterior guardará su archivo con el nombre fig1.jpg en la raíz de la E directorio.

    Si está interesado en la visualización de datos y no sabe por dónde empezar, asegúrese de consultar nuestro libro sobre Visualización de datos en Python.

    Data Visualization in Python, un libro para desarrolladores de Python principiantes e intermedios, lo guiará a través de la manipulación simple de datos con Pandas, cubrirá bibliotecas de trazado centrales como Matplotlib y Seaborn, y le mostrará cómo aprovechar las bibliotecas declarativas y experimentales como Altair.

     

    Visualización de datos en Python

    ¡Comprenda mejor sus datos con visualizaciones! Con más de 275 páginas, aprenderá los entresijos de la visualización de datos en Python con bibliotecas populares como Matplotlib, Seaborn, Bokeh y más.

     

    Conclusión

    Matplotlib es una de las bibliotecas de Python más utilizadas para la visualización y el trazado de datos. El artículo explica algunas de las funciones de Matplotlib más utilizadas con la ayuda de diferentes ejemplos. Aunque el artículo cubre la mayoría de las cosas básicas, esto es solo la punta del iceberg. Le sugiero que explore la documentación oficial para el Biblioteca matplotlib y vea qué más puede hacer con esta increíble biblioteca.

     

    Etiquetas:

    Deja una respuesta

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