es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Gráfico de dispersión para mostrar las mayorías e incluir números extremos.

Simple data como lo siguiente y quiero ponerlos en un gráfico de dispersión.

Funciona bien si no existen valores atípicos (es decir, números extremadamente grandes).

import pandas as pd
import matplotlib.pyplot as plt
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()

dates = ["2021-01-01",
"2021-01-01", "2021-01-06",
"2021-01-08", "2021-01-12",
"2021-02-01", "2021-02-11",
"2021-02-12", "2021-02-15",
"2021-02-16", "2021-03-11",
"2021-03-21", "2021-03-22",
"2021-03-23", "2021-03-24",
"2021-04-02", "2021-04-12",
"2021-04-22", "2021-04-26",
"2021-04-30"]

numbers= [6400,
5100,5000,
4000,3686,
9000,8050,
8000,6050,
6000,9000,
8500,7800,
7000,6000,
10000,9600,
8000,7883,
6686]

dates = [pd.to_datetime(d) for d in dates]

plt.scatter(dates, numbers, s =100, c = 'red')
plt.show()

enter image description here

Pero cuando hay uno o más números extremos, por ejemplo, el último número 6686 se convirtió en 66860. El nuevo gráfico muestra la mayoría de los puntos como insignificantes (debido al nuevo eje y).

enter image description here

¿Cuál es la solución correcta para tener un gráfico de dispersión como antes (manteniendo el eje y como estaba) y todavía visualizando los números extremos?

El propósito del gráfico es mostrar y enfocarse en la distribución de los puntos por debajo de 10000 y también tener en cuenta que existen números extremos.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una solución podría ser ajustar la escala del eje y utilizando plt.ylim() para establecer el límite superior del eje y a un valor ligeramente mayor que el valor máximo en numbers. Por ejemplo, si el valor máximo en numbers es 66860, podemos establecer el límite superior del eje y en 70000 utilizando plt.ylim(0, 70000).

    Otra solución podría ser utilizar una escala logarítmica para el eje y agregando plt.yscale('log') al código. Esto comprimirá los datos en el extremo superior de la escala y hará que los números extremos sean más visibles junto con el resto de los datos. Sin embargo, utilizar una escala logarítmica puede no ser adecuado para todos los conjuntos de datos y debe utilizarse con precaución.

    Por lo tanto, el código modificado con la solución del límite del eje y se ve así:

    import pandas as pd
    import matplotlib.pyplot as plt
    from pandas.plotting import register_matplotlib_converters
    register_matplotlib_converters()
    
    dates = ["2021-01-01",
    "2021-01-01", "2021-01-06",
    "2021-01-08", "2021-01-12",
    "2021-02-01", "2021-02-11",
    "2021-02-12", "2021-02-15",
    "2021-02-16", "2021-03-11",
    "2021-03-21", "2021-03-22",
    "2021-03-23", "2021-03-24",
    "2021-04-02", "2021-04-12",
    "2021-04-22", "2021-04-26",
    "2021-04-30"]
    
    numbers= [6400,
    5100,5000,
    4000,3686,
    9000,8050,
    8000,6050,
    6000,9000,
    8500,7800,
    7000,6000,
    10000,9600,
    8000,7883,
    66860]
    
    dates = [pd.to_datetime(d) for d in dates]
    
    plt.scatter(dates, numbers, s =100, c = 'red')
    plt.ylim(0, 70000)
    plt.show()
    
    

Comments are closed.