xlabel outside matrices lineas graficos graficas graficar example dibujar crear coordenadas python matplotlib

python - outside - Dibujando líneas entre dos parcelas en Matplotlib.



python graficos 2d (3)

La solución de las otras respuestas es subóptima en muchos casos (ya que solo funcionaría si no se realizan cambios en la gráfica después de calcular los puntos).

Una mejor solución utilizaría el ConnectionPatch especialmente diseñado:

import matplotlib.pyplot as plt from matplotlib.patches import ConnectionPatch import numpy as np fig = plt.figure(figsize=(10,5)) ax1 = fig.add_subplot(121) ax2 = fig.add_subplot(122) x,y = np.random.rand(100),np.random.rand(100) ax1.plot(x,y,''ko'') ax2.plot(x,y,''ko'') i = 10 xy = (x[i],y[i]) con = ConnectionPatch(xyA=xy, xyB=xy, coordsA="data", coordsB="data", axesA=ax2, axesB=ax1, color="red") ax2.add_artist(con) ax1.plot(x[i],y[i],''ro'',markersize=10) ax2.plot(x[i],y[i],''ro'',markersize=10) plt.show()

Estoy dibujando dos subparcelas con Matplotlib, esencialmente siguiendo:

subplot(211); imshow(a); scatter(..., ...) subplot(212); imshow(b); scatter(..., ...)

¿Puedo trazar líneas entre esas dos subparcelas? ¿Como podría hacerlo?


No estoy seguro de si esto es exactamente lo que está buscando, pero es un truco sencillo para trazar en las subparcelas.

import matplotlib.pyplot as plt import numpy as np ax1=plt.figure(1).add_subplot(211) ax2=plt.figure(1).add_subplot(212) x_data=np.linspace(0,10,20) ax1.plot(x_data, x_data**2,''o'') ax2.plot(x_data, x_data**3, ''o'') ax3 = plt.figure(1).add_subplot(111) ax3.plot([5,5],[0,1],''--'') ax3.set_xlim([0,10]) ax3.axis("off") plt.show()


Podrías usar fig.line . Añade cualquier línea a tu figura. Las líneas de la figura son más altas que las líneas de los ejes, por lo que no necesita ningún eje para dibujarla.

Este ejemplo marca el mismo punto en los dos ejes. Es necesario tener cuidado con el sistema de coordenadas, pero la transformación hace todo el trabajo por usted.

import matplotlib.pyplot as plt import matplotlib import numpy as np fig = plt.figure(figsize=(10,5)) ax1 = fig.add_subplot(121) ax2 = fig.add_subplot(122) x,y = np.random.rand(100),np.random.rand(100) ax1.plot(x,y,''ko'') ax2.plot(x,y,''ko'') i = 10 transFigure = fig.transFigure.inverted() coord1 = transFigure.transform(ax1.transData.transform([x[i],y[i]])) coord2 = transFigure.transform(ax2.transData.transform([x[i],y[i]])) line = matplotlib.lines.Line2D((coord1[0],coord2[0]),(coord1[1],coord2[1]), transform=fig.transFigure) fig.lines = line, ax1.plot(x[i],y[i],''ro'',markersize=20) ax2.plot(x[i],y[i],''ro'',markersize=20) plt.show()