tiempo real matrices graficos graficas graficar grafica crear coordenadas barras python matplotlib

real - matplotlib python



¿Cómo puedo hacer una gráfica de dispersión coloreada por densidad en matplotlib? (2)

Me gustaría hacer una gráfica de dispersión donde cada punto está coloreado por la densidad espacial de los puntos cercanos.

Me encontré con una pregunta muy similar, que muestra un ejemplo de esto usando R:

R Diagrama de dispersión: el símbolo de color representa el número de puntos superpuestos

¿Cuál es la mejor manera de lograr algo similar en python usando matplotlib?


Podrías hacer un histograma:

import numpy as np import matplotlib.pyplot as plt # fake data: a = np.random.normal(size=1000) b = a*3 + np.random.normal(size=1000) plt.hist2d(a, b, (50, 50), cmap=plt.cm.jet) plt.colorbar()


Además de hist2d o hexbin como @askewchan sugirió, puede usar el mismo método que usa la respuesta aceptada en la pregunta que enlazó.

Si quieres hacer eso:

import numpy as np import matplotlib.pyplot as plt from scipy.stats import gaussian_kde # Generate fake data x = np.random.normal(size=1000) y = x * 3 + np.random.normal(size=1000) # Calculate the point density xy = np.vstack([x,y]) z = gaussian_kde(xy)(xy) fig, ax = plt.subplots() ax.scatter(x, y, c=z, s=100, edgecolor='''') plt.show()

Si desea que los puntos se tracen en orden de densidad para que los puntos más densos estén siempre en la parte superior (similar al ejemplo vinculado), simplemente ordénelos por los valores z. También voy a usar un tamaño de marcador más pequeño aquí, ya que se ve un poco mejor:

import numpy as np import matplotlib.pyplot as plt from scipy.stats import gaussian_kde # Generate fake data x = np.random.normal(size=1000) y = x * 3 + np.random.normal(size=1000) # Calculate the point density xy = np.vstack([x,y]) z = gaussian_kde(xy)(xy) # Sort the points by density, so that the densest points are plotted last idx = z.argsort() x, y, z = x[idx], y[idx], z[idx] fig, ax = plt.subplots() ax.scatter(x, y, c=z, s=50, edgecolor='''') plt.show()