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()
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).
¿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.
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 ennumbers
. Por ejemplo, si el valor máximo ennumbers
es66860
, podemos establecer el límite superior del eje y en70000
utilizandoplt.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í: