Diagrama de dispersión de Matplotlib: tutorial y ejemplos

    Introducción

    Matplotlib es una de las bibliotecas de visualización de datos más utilizadas en Python. Desde visualizaciones simples hasta complejas, es la biblioteca de referencia para la mayoría.

    En este tutorial, veremos cómo trazar un diagrama de dispersión en Matplotlib.

    Datos de importacion

    Usaremos el Vivienda Ames conjunto de datos y visualización de correlaciones entre características de él.

    Importemos Pandas y carguemos en el conjunto de datos:

    import pandas as pd
    
    df = pd.read_csv('AmesHousing.csv')
    

    Trazar un diagrama de dispersión en Matplotlib

    Ahora, con el conjunto de datos cargado, importemos Matplotlib, decidamos las características que queremos visualizar y construyamos un diagrama de dispersión:

    import matplotlib.pyplot as plt
    import pandas as pd
    
    df = pd.read_csv('AmesHousing.csv')
    
    fig, ax = plt.subplots(figsize=(10, 6))
    ax.scatter(x = df['Gr Liv Area'], y = df['SalePrice'])
    plt.xlabel("Living Area Above Ground")
    plt.ylabel("House Price")
    
    plt.show()
    

    Aquí, hemos creado un gráfico, usando la instancia de PyPlot, y hemos establecido el tamaño de la figura. Usando el devuelto Axes objeto, que se devuelve desde el subplots() función, hemos llamado a la scatter() función.

    Necesitamos suministrar el x y y argumentos como las características que nos gustaría utilizar para poblar la trama. Ejecutar este código da como resultado:

    También hemos establecido las etiquetas xey para indicar lo que representan las variables. Existe una clara correlación positiva entre estas dos variables. Cuanto más área hay sobre el nivel del suelo, más alto era el precio de la casa.

    Hay algunos valores atípicos, pero la gran mayoría sigue esta hipótesis.

    Trazar múltiples diagramas de dispersión en Matplotlib

    Si desea comparar más de una variable con otra, como, por ejemplo, verifique la correlación entre la calidad general de la casa y el precio de venta, así como el área sobre el nivel del suelo, no es necesario hacer un diagrama 3D para esta.

    Si bien existen gráficos 2D que visualizan correlaciones entre más de dos variables, algunos de ellos no son completamente amigables para principiantes.

    Una manera fácil de hacer esto es trazar dos parcelas: en una, trazaremos el área sobre el nivel del suelo contra el precio de venta, en la otra, trazaremos la calidad general contra el precio de venta.

    Echemos un vistazo a cómo hacer eso:

    import matplotlib.pyplot as plt
    import pandas as pd
    
    df = pd.read_csv('AmesHousing.csv')
    
    fig, ax = plt.subplots(2, figsize=(10, 6))
    ax[0].scatter(x = df['Gr Liv Area'], y = df['SalePrice'])
    ax[0].set_xlabel("Living Area Above Ground")
    ax[0].set_ylabel("House Price")
    
    ax[1].scatter(x = df['Overall Qual'], y = df['SalePrice'])
    ax[1].set_xlabel("Overall Quality")
    ax[1].set_ylabel("House Price")
    
    plt.show()
    

    Aquí, hemos llamado plt.subplots(), pasando 2 para indicar que nos gustaría instanciar dos subtramas en la figura.

    Podemos acceder a estos a través del Axes instancia – ax. ax[0] se refiere a los ejes de la primera subtrama, mientras que ax[1] se refiere a los ejes de la segunda subtrama.

    Aquí, hemos llamado al scatter() funcionan en cada uno de ellos, proporcionándoles etiquetas. Ejecutar este código da como resultado:

    Trazar un diagrama de dispersión 3D en Matplotlib

    Si no desea visualizar esto en dos subtramas separadas, puede trazar la correlación entre estas variables en 3D. Matplotlib tiene una función de trazado 3D incorporada, por lo que hacerlo es muy sencillo.

    Primero, necesitaremos importar el Axes3D clase de mpl_toolkits.mplot3d. Este tipo especial de Axes es necesario para visualizaciones 3D. Con él, podemos pasar otro argumento: z, que es la tercera característica que nos gustaría visualizar.

    Sigamos adelante e importemos el Axes3D objeto y trazar un diagrama de dispersión contra las tres características anteriores:

    import matplotlib.pyplot as plt
    import pandas as pd
    from mpl_toolkits.mplot3d import Axes3D
    
    df = pd.read_csv('AmesHousing.csv')
    
    fig = plt.figure()
    ax = fig.add_subplot(111, projection = '3d')
    
    x = df['SalePrice']
    y = df['Gr Liv Area']
    z = df['Overall Qual']
    
    ax.scatter(x, y, z)
    ax.set_xlabel("Sale price")
    ax.set_ylabel("Living area above ground level")
    ax.set_zlabel("Overall quality")
    
    plt.show()
    

    La ejecución de este código da como resultado una visualización 3D interactiva que podemos desplazar e inspeccionar en un espacio tridimensional:

     

    Personalización del gráfico de dispersión en Matplotlib

    Puede cambiar el aspecto de la trama proporcionando el scatter() función con argumentos adicionales, como color, alpha, etc:

    ax.scatter(x = df['Gr Liv Area'], y = df['SalePrice'], color = "blue", edgecolors = "white", linewidths = 0.1, alpha = 0.7)
    

    Ejecutar este código resultaría en:

    Conclusión

    En este tutorial, hemos repasado varias formas de trazar un diagrama de dispersión usando Matplotlib y Python.

    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 340 páginas, aprenderá los entresijos de la visualización de datos en Python con bibliotecas populares como Matplotlib, Seaborn, Bokeh y más.

     

    Etiquetas:

    Deja una respuesta

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