scatter
o scatter3D
El procedimiento para crear gráficos de dispersión 3D en matplotlib es muy similar al de crear gráficos de dispersión 2D, ya que se utiliza la misma función, pero en el caso de gráficos 3D tendrás que agregar un sub-gráfico con proyección 3D (fig.add_subplot(projection = '3d')
) y pasar la variable Z a la función. Ten en cuenta que matplotlib también propociona la misma función pero con el nombre scatter3D
.
import matplotlib.pyplot as plt
import numpy as np
# Datos de muestra
np.random.seed(4072023)
x = np.random.normal(size = 200)
y = np.random.normal(size = 200)
z = np.random.normal(size = 200)
fig = plt.figure()
ax = fig.add_subplot(projection = '3d')
# Gráfico de dispersión 3D
ax.scatter(x, y, z)
# Equivalente a:
ax.scatter3D(x, y, z)
# plt.show()
Agregar un título y etiquetas a los ejes
Si quieres agregar un título o las etiquetas de los ejes puedes usar las funciones title
, set_xlabel
, set_ylabel
y set_zlabel
y pasar el texto deseado.
import matplotlib.pyplot as plt
import numpy as np
# Datos de muestra
np.random.seed(4072023)
x = np.random.normal(size = 200)
y = np.random.normal(size = 200)
z = np.random.normal(size = 200)
fig = plt.figure()
ax = fig.add_subplot(projection = '3d')
# Gráfico de dispersión 3D
ax.scatter(x, y, z)
# Etiquetas de los ejes
ax.set_xlabel('Etiqueta del eje X')
ax.set_ylabel('Etiqueta del eje Y')
ax.set_zlabel('Etiqueta del eje Z')
# Título
plt.title("Gráfico de dispersión 3D")
# plt.show()
Por defecto, los marcadores de los gráficos de dispersión 3D son círculos azules de tamaño 20, pero puedes personalizar estos ajustes en base a tus preferencias.
El argumento marker
de la función se puede utilizar para cambiar el marcador por defecto. Si no sabes qué marcador elegir puedes seleccionar uno de esta lista de marcadores de matplotlib.
import matplotlib.pyplot as plt
import numpy as np
# Datos de muestra
np.random.seed(4072023)
x = np.random.normal(size = 200)
y = np.random.normal(size = 200)
z = np.random.normal(size = 200)
fig = plt.figure()
ax = fig.add_subplot(projection = '3d')
# Gráfico de dispersión 3D
ax.scatter(x, y, z, marker = '*')
# plt.show()
Tamaño de los marcadores
Si los marcadores son demasiado grandes o demasiado pequeños puedes elegir el tamaño adecuado pasando un entero al argumento s
. El valor por defecto es 20 ‘puntos ** 2’.
import matplotlib.pyplot as plt
import numpy as np
# Datos de muestra
np.random.seed(4072023)
x = np.random.normal(size = 200)
y = np.random.normal(size = 200)
z = np.random.normal(size = 200)
fig = plt.figure()
ax = fig.add_subplot(projection = '3d')
# Gráfico de dispersión 3D
ax.scatter(x, y, z, marker = '^', s = 200)
# plt.show()
Si quieres añadir marcadores diferentes en base a alguna condición o grupo, tendras que dividir tus datos y agregar los puntos de manera separada o mediante un bucle, ya que el argumento markers
no admite listas.
Color de los marcadores
El color de los marcadores se puede cambiar pasando un nuevo color a c
. Recuerda ver la lista completa de colores de matplotlib para seleccionar el mejor color para tu gráfico.
import matplotlib.pyplot as plt
import numpy as np
# Datos de muestra
np.random.seed(4072023)
x = np.random.normal(size = 200)
y = np.random.normal(size = 200)
z = np.random.normal(size = 200)
fig = plt.figure()
ax = fig.add_subplot(projection = '3d')
# Gráfico de dispersión 3D
ax.scatter(x, y, z, c = 'green')
# plt.show()
Color por grupo o en base a una condición
El argumento c
admite una lista de colores como entrada. Esto es muy útil si quieres colorear los marcadores en base a grupos o en base a una condición. En el ejemplo siguiente asignamos colores en base a los valores de z
.
import matplotlib.pyplot as plt
import numpy as np
# Datos de muestra
np.random.seed(4072023)
x = np.random.normal(size = 200)
y = np.random.normal(size = 200)
z = np.random.normal(size = 200)
# Rojo si z > 0 y azul en otro caso
colors = np.where(z > 0, "red", "blue")
fig = plt.figure()
ax = fig.add_subplot(projection = '3d')
# Gráfico de dispersión 3D
ax.scatter(x, y, z, c = colors)
# plt.show()
Degradado de color
El color de los marcadores también puede ser en base a una variable continua, creando así un gradiente de color. En el ejemplo de abajo vinculamos el color a los valores que toma la variable z
y especificamos la paleta de color viridis a través del argumento cmap
.
import matplotlib.pyplot as plt
import numpy as np
# Datos de muestra
np.random.seed(4072023)
x = np.random.normal(size = 200)
y = np.random.normal(size = 200)
z = np.random.normal(size = 200)
fig = plt.figure()
ax = fig.add_subplot(projection = '3d')
# Gráfico de dispersión 3D
ax.scatter(x, y, z, c = z, cmap = 'viridis')
# plt.show()
Gráfico de dispersión 3D con leyenda
Si los marcadores se colorean en base a una variable agregar una leyenda es una buena opción para que los colores sean más interpretables. Para ello tendrás que usar la función colorbar
como en el ejemplo siguiente y personalizar su tamaño con los argumentos shrink
y aspect
si así lo deseas.
import matplotlib.pyplot as plt
import numpy as np
# Datos de muestra
np.random.seed(4072023)
x = np.random.normal(size = 200)
y = np.random.normal(size = 200)
z = np.random.normal(size = 200)
fig = plt.figure()
ax = fig.add_subplot(projection = '3d')
# Gráfico de dispersión 3D con leyenda
plot = ax.scatter(x, y, z, c = z, cmap = 'Reds')
fig.colorbar(plot, ax = ax, shrink = 0.5, aspect = 10)
# plt.show()
También te puede interesar