Escala logarítmica de Matplotlib

Escala logarítmica de Matplotlib

  • Orquestación
6 min de lectura Actualizado Sep 19, 2019

Puntos clave: La escala logarítmica de Matplotlib mejora la visualización de datos al mostrar eficazmente los valores a lo largo de grandes rangos, haciendo que los números pequeños y grandes sean interpretables. Al utilizar potencias de 10, evita la compresión de valores más pequeños.

  • Las escalas logarítmicas son esenciales para visualizar amplios rangos de datos.
  • Ejemplos de código demuestran cómo implementar escalas logarítmicas en gráficos Matplotlib.

En este artículo, explicaremos cómo utilizar la escala logarítmica en Matplotlib.

La escala logarítmica están útil para graficar datos que incluyen números muy pequeños y muy grandes porque la escala grafica los datos para te puede Ve todos los números fácilmente, sin que los números pequeños se compriman demasiado.

Logaritmos

Primero, repasemos un poco de matemáticas de instituto. Un logaritmo están una forma de Haz que un número grande parezca pequeño viéndolo como una potencia de 10. Hay otras bases de son logaritmos además del 10, como el logaritmo natural usado en matemáticas, que está dado por la constante e=2,718.... Pero, para nuestros propósitos, utilizaríamos logaritmos en base 10.

En resumen:

log10x = y significa que 10 elevado a potencia y es igual a x, es decir, 10 ** y = x. Así que log10100=2 porque 10**2 = 100.

La escala logarítmica en Matplotlib

Un gráfico bidimensional en Matplotlib tiene una escala y y una escala x. La escala significa las graduaciones o marcas de verificación a lo largo de un eje. Pueden ser cualquiera de:

  • matplotlib.scale.LinearScale—Estos son solo números, como 1, 2, 3.
  • matplotlib.scale.logScale—Estas son potencias de 10. te podrían utiliza cualquier base, como 2 o el valor del logaritmo natural, que están dado por el número e. Usar bases diferentes estrecharía o ensancharía el espaciado de los elementos trazados, facilitando la visibilidad.
  • matplotlib.scale.SymmetricalLogScale y matplotlib.LogitScale—Estos se son usados para números menores que 1, en particular para números muy pequeños cuyos logaritmos son números negativos muy grandes.

Uso de la escala logarítmica

Vamos a graficar los ingresos de algunas grandes empresas y de otras pequeñas.

Amazon, Alphabet (Google) e Intel son muchas veces más grandes que las pequeñas empresas Pete's, Clock y Buckey's BBQ (que nosotros inventamos). La diferencia entre ellas y Amazon es enorme, así que el gráfico de cada empresa pequeña se encuentra en la misma línea vertical 0 en la escala lineal.

Matplotlib elige la escala para los ejes si te no la fija explícitamente. Aquí no lo hicimos. La pequeña notación le11 al final significa que el xaxis están en notación científica, que en este caso significa ingresos están mostrado un múltiplo de 10**11 (100.000 millones de dólares). Los ingresos de Amazon de 232.887.000.000 están 2,325*(10**11). Mientras que Pete es de 600.000 dólares, como potencia de 11, están 0,000006*(10**11). Esto explica por qué incluso Pepsi, una gran empresa, está cerca de cero en el gráfico de abajo.

Así que solucionamos ese problema en el siguiente gráfico usando la escala logarítmica. Ve abajo una explicación del código.

    import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

data = { 
        "Pete's":           600000,
        "Clock":           1600000,
        "Buckey's BBQ":    2600000,
        "Pepsi":        6466000000,
        "Intel" :      70848000000,	
        "Alphabet":    136819000000,
        "Amazon":      232887000000	
        }
        
df = pd.DataFrame.from_dict(data,orient='index',columns=['Revenue'])
dg =pd.to_numeric(df['Revenue'])
dc = pd.Series(dg.index.values.tolist()).to_frame('Company') 
dat = df.assign(Company=dc.values)

data = dat.sort_values(by=['Revenue'])
 
plt.scatter(data['Revenue'],data['Company'])
plt.grid()
plt.show()

Aquí, todo está igual excepto que incluimos plt.xscale("log"). Ahora podemos Ve los valores más fácilmente ya que son potencias de 10. Así que, los pequeños ingresos de Pete, 600.000 dólares, están fáciles de Ve porque son 6*(10**6). Y los de Amazon están aproximadamente 100.000 (10**5) veces mayores.

    import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

data = { 
        "Pete's":           600000,
        "Clock":           1600000,
        "Buckey's BBQ":    2600000,
        "Pepsi":        6466000000,
        "Intel" :      70848000000,	
        "Alphabet":    136819000000,
        "Amazon":      232887000000	
        }
        
df = pd.DataFrame.from_dict(data,orient='index',columns=['Revenue'])
dg =pd.to_numeric(df['Revenue'])
dc = pd.Series(dg.index.values.tolist()).to_frame('Company') 
dat = df.assign(Company=dc.values)

data = dat.sort_values(by=['Revenue'])
 
plt.scatter(data['Revenue'],data['Company'])
plt.grid()
plt.xscale("log")
plt.show()

Ahora te puedes Ve con más claridad el tamaño de cada empresa por sus ingresos

Explicación del código

Parte de este código puede ser difícil de entender sin un conocimiento de ciencia de datos porque utiliza Pandas y NumPy. Esto es irónico, ya que Pandas fue creado especialmente para Haz el trabajo con datos tipo tabla.

El primer paso toma los datos que hemos creado como diccionario y los convierte en un dataframe de Pandas. El índice de estos datos será el nombre de la empresa. Dijimos orient='index' , es decir, toma la primera entrada como valor del índice. Luego le damos un nombre de columna con columnas=['Ingresos']. El nombre de la empresa no tiene nombre de columna porque no es una columna; es un índice de filas.

    df = pd.DataFrame.from_dict(data,orient='index',columns=['Revenue'])

A continuación, debemos convertir las cadenas de ingresos a números. De lo contrario, se ordenarán por matplotlib como letras.

    dg =pd.to_numeric(df['Revenue'])

Ahora queremos Crea una serie, que están un dataframe con una sola columna. Los valores serán el índice del dataframe anterior. Así es como Obtén las empresas listadas como una columna de datos, llamada Company.

    dc = pd.Series(dg.index.values.tolist()).to_frame('Company')

A continuación, añadimos los valores de la serie que acabamos de crear como otra columna en el dataframe dat .

    dat = df.assign(Company=dc.values)

Luego trazamos el diagrama de dispersión dándole dataframes para los valores x e y. Cada uno tiene la misma forma, (7,), que te puede comprobar con data['Revenue'].shape. La forma están un concepto a veces difícil de NumPy. Básicamente significa la dimensión del array. En un gráfico xy deben ser iguales.

    plt.scatter(data['Revenue'],data['Company'])

El resto está autoexplicativo:

    plt.grid()
plt.xscale("log")
plt.show()

Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.

Más de Orquestación

¿Te interesa saber más de BMC?

El Brief están nuestro correo mensual sobre el mainframe y la orquestación empresarial: investigación, historias de clientes, noticias de productos, eventos.

Al registrarse para esta oferta te son confirmar que te leído y aceptado la Política de Privacidad de BMC.

Tú te has suscrito a The Brief

El Brief abarca la orquestación de mainframe y empresa—BMC AMI y Control-M—y la investigación de analistas, despliegues de clientes y eventos en ambas áreas.