Agregar y = x a un gráfico de dispersión de matplotlib si no he seguido la pista de todos los puntos de datos que ingresaron

Aquí hay un código que hace un diagtwig de dispersión de varias series diferentes usando matplotlib y luego agrega la línea y = x:

import numpy as np, matplotlib.pyplot as plt, matplotlib.cm as cm, pylab nseries = 10 colors = cm.rainbow(np.linspace(0, 1, nseries)) all_x = [] all_y = [] for i in range(nseries): x = np.random.random(12)+i/10.0 y = np.random.random(12)+i/5.0 plt.scatter(x, y, color=colors[i]) all_x.extend(x) all_y.extend(y) # Could I somehow do the next part (add identity_line) if I haven't been keeping track of all the x and y values I've seen? identity_line = np.linspace(max(min(all_x), min(all_y)), min(max(all_x), max(all_y))) plt.plot(identity_line, identity_line, color="black", linestyle="dashed", linewidth=3.0) plt.show() 

Para lograr esto, he tenido que hacer un seguimiento de todos los valores de x e y que entraron en el diagtwig de dispersión para que sepa dónde debe comenzar y terminar la línea de identity_line . ¿Hay alguna manera de que aparezca y = x para aparecer incluso si no tengo una lista de todos los puntos que dibujé? Pensaría que algo en matplotlib me puede dar una lista de todos los puntos después del hecho, pero no he podido averiguar cómo obtener esa lista.

No necesita saber nada acerca de sus datos per se . Puede salirse con lo que su objeto Axes matplotlib le dirá acerca de los datos.

Vea abajo:

 import numpy as np import matplotlib.pyplot as plt # random data N = 37 x = np.random.normal(loc=3.5, scale=1.25, size=N) y = np.random.normal(loc=3.4, scale=1.5, size=N) c = x**2 + y**2 # now sort it just to make it look like it's related x.sort() y.sort() fig, ax = plt.subplots() ax.scatter(x, y, s=25, c=c, cmap=plt.cm.coolwarm, zorder=10) 

Aquí está la parte buena:

 lims = [ np.min([ax.get_xlim(), ax.get_ylim()]), # min of both axes np.max([ax.get_xlim(), ax.get_ylim()]), # max of both axes ] # now plot both limits against eachother ax.plot(lims, lims, 'k-', alpha=0.75, zorder=0) ax.set_aspect('equal') ax.set_xlim(lims) ax.set_ylim(lims) fig.savefig('/Users/paul/Desktop/so.png', dpi=300) 

Et voilà

introduzca la descripción de la imagen aquí