Clase Matplotlib.patches.ConnectionPatch en Python

Matplotlib es una increíble biblioteca de visualización en Python para gráficos 2D de arrays. Matplotlib es una biblioteca de visualización de datos multiplataforma basada en arrays NumPy y diseñada para funcionar con la pila SciPy más amplia. 

matplotlib.patches.ConnectionPatch

Matplotlib.patches.ConnectionPatch es una subclase de la clase matplotlib.patches.FancyArrowPatch y se usa para hacer líneas de conexión entre dos puntos.

Sintaxis: class matplotlib.patches.ConnectionPatch(xyA, xyB, coordsA, coordsB=Ninguno, axesA=Ninguno, axesB=Ninguno, arrowstyle=’-‘, arrow_transmuter=Ninguno, connectionstyle=’arc3’, conector=Ninguno, patchA=Ninguno , parcheB=Ninguno, encogerA=0.0, encogerB=0.0, escala_mutación=10.0, aspecto_mutación=Ninguno, clip_on=False, dpi_cor=1.0, **kwargs)

Parámetros: 

  • xyA: Es el punto de inicio de la línea de conexión en el gráfico xy también llamado Punto A.
  • xyB: Es el punto de inicio de la línea de conexión en el gráfico xy también llamado Punto B.
  • coordsA: Coordenada del punto A.
  • coordsB: Coordenada del punto B.
  • axesA: es el punto de inicio de la conexión de los ejes en la gráfica xy.
  • axesB: Es el punto final de la conexión de ejes en la gráfica xy.
  • arrowstyle: se utiliza para diseñar la flecha de conexión. Su tipo predeterminado es ‘-‘.
  • arrow_transmuter: Se utiliza para ignorar una línea de conexión.
  • estilo de conexión: describe cómo se conectan posA y posB . Puede ser una instancia de la clase ConnectionStyle o una string con el nombre de connectionstyle , tiene atributos opcionales separados por comas. 
  • conector: generalmente se ignora y decide qué conector ignorar.
  • patchA: se usa para agregar parches en el punto A.
  • patchB: se usa para agregar parches en el punto B
  • encogerA: se utiliza para encoger el conector en el punto A.
  • encogerB: se utiliza para encoger el conector en el punto B.
  • escala_mutación : valor con el que se escalan los atributos de estiloflecha (p. ej., longitud_cabeza).
  • mutación_aspecto: la altura del rectángulo se reducirá en este valor antes de la mutación y el cuadro mutado se estirará en el inverso.
  • clip_on: establece si el artista usa recorte.
  • dpi_cor: dpi_cor se usa actualmente para cosas relacionadas con el ancho de línea y el factor de reducción. La escala de mutación se ve afectada por esto. 
     

La siguiente es una lista de claves válidas de Kwargs; 
 

Llave Descripción
estilo de flecha el estilo de flecha
Estilo de conexión el estilo de conexión
relpos el valor predeterminado es (0.5, 0.5)
parcheA el valor predeterminado es el cuadro delimitador del texto
parcheB el valor predeterminado es Ninguno 
 
encogerA el valor predeterminado es 2 puntos
encogerB el valor predeterminado es 2 puntos
mutación_escala el valor predeterminado es el tamaño del texto (en puntos)
mutación_aspecto el valor predeterminado es 1.
? cualquier clave para matplotlib.patches.PathPatch

Las coordenadas de xyA y xyB se indican mediante una string coordsA y coordsB.  

Propiedad Descripción
‘puntos de figura’ puntos de la esquina inferior izquierda de la figura
‘píxeles de figura’ píxeles de la esquina inferior izquierda de la figura
‘fracción de figura’ 0, 0 es la parte inferior izquierda de la figura y 1, 1 es la parte superior derecha
‘puntos de ejes’ puntos de la esquina inferior izquierda de los ejes
‘píxeles de ejes’ píxeles de la esquina inferior izquierda de los ejes
‘fracción de ejes’ 0, 0 es la parte inferior izquierda de los ejes y 1, 1 es la parte superior derecha
‘datos’ usar el sistema de coordenadas del objeto que se está anotando (predeterminado)
‘puntos de compensación’ desplazamiento (en puntos) del valor xy
‘polar’ puede especificar theta, r para la anotación, incluso en gráficos cartesianos. Tenga en cuenta que si está utilizando ejes polares, no necesita especificar polar para el sistema de coordenadas ya que ese es el sistema de coordenadas nativo de «datos».

Ejemplo 1: 

Python3

from matplotlib.patches import ConnectionPatch
import matplotlib.pyplot as plt
 
fig, (ax1, ax2) = plt.subplots(1, 2,
                               figsize =(6, 3))
 
# Draw a simple arrow between
# two points in axes coordinates
# within a single axes.
xyA = (0.2, 0.2)
xyB = (0.8, 0.8)
coordsA = "data"
coordsB = "data"
con = ConnectionPatch(xyA, xyB,
                      coordsA, coordsB,
                      arrowstyle ="-|>",
                      shrinkA = 5, shrinkB = 5,
                      mutation_scale = 20,
                      fc ="w")
 
ax1.plot([xyA[0], xyB[0]], [xyA[1],
                            xyB[1]], "o")
ax1.add_artist(con)
 
# Draw an arrow between the
# same point in data coordinates,
# but in different axes.
xy = (0.3, 0.2)
con = ConnectionPatch(
    xyA = xy, coordsA = ax2.transData,
    xyB = xy, coordsB = ax1.transData,
    arrowstyle ="->", shrinkB = 5)
 
ax2.add_artist(con)
 
# Draw a line between the different
# points, defined in different coordinate
# systems.
con = ConnectionPatch(
    # in axes coordinates
    xyA =(0.6, 1.0), coordsA = ax2.transAxes,
    # x in axes coordinates, y in data coordinates
    xyB =(0.0, 0.2), coordsB = ax2.get_yaxis_transform(),
    arrowstyle ="-")
 
ax2.add_artist(con)
 
ax1.set_xlim(0, 1)
ax1.set_ylim(0, 1)
ax2.set_xlim(0, .5)
ax2.set_ylim(0, .5)
 
plt.show()

Producción: 

Ejemplo 2:  

Python3

import matplotlib.pyplot as plt
from matplotlib.patches import ConnectionPatch
import numpy as np
 
 
# make figure and assign axis
# objects
fig = plt.figure(figsize =(9, 5))
ax1 = fig.add_subplot(121)
ax2 = fig.add_subplot(122)
fig.subplots_adjust(wspace = 0)
 
# pie chart parameters
ratios = [.27, .56, .17]
explode = [0.1, 0, 0]
 
# rotate so that first wedge is
# split by the x-axis
angle = -180 * ratios[0]
ax1.pie(ratios, autopct ='% 1.1f %%',
        startangle = angle,
        explode = explode)
 
# bar chart parameters
 
xpos = 0
bottom = 0
ratios = [.33, .54, .07, .06]
width = .2
colors = [[.1, .3, .5],
          [.1, .3, .3],
          [.1, .3, .7],
          [.1, .3, .9]]
 
for j in range(len(ratios)):
    height = ratios[j]
    ax2.bar(xpos, height, width,
            bottom = bottom,
            color = colors[j])
     
    ypos = bottom + ax2.patches[j].get_height() / 2
    bottom += height
    ax2.text(xpos,
             ypos,
             "% d %%" % (ax2.patches[j].get_height() * 100),
             ha ='center')
 
ax2.set_title('')
ax2.legend(('50-65', 'Over 65', '35-49', 'Under 35'))
ax2.axis('off')
ax2.set_xlim(- 2.5 * width, 2.5 * width)
 
# use ConnectionPatch to draw
# lines between the two plots
# get the wedge data
theta1, theta2 = ax1.patches[0].theta1, ax1.patches[0].theta2
center, r = ax1.patches[0].center, ax1.patches[0].r
bar_height = sum([item.get_height() for item in ax2.patches])
 
# draw top connecting line
x = r * np.cos(np.pi / 180 * theta2) + center[0]
y = np.sin(np.pi / 180 * theta2) + center[1]
con = ConnectionPatch(xyA =(-width / 2, bar_height),
                      coordsA = ax2.transData,
                      xyB =(x, y),
                      coordsB = ax1.transData)
 
con.set_color([0, 0, 0])
con.set_linewidth(4)
ax2.add_artist(con)
 
# draw bottom connecting line
x = r * np.cos(np.pi / 180 * theta1) + center[0]
y = np.sin(np.pi / 180 * theta1) + center[1]
 
con = ConnectionPatch(xyA =(-width / 2, 0),
                      coordsA = ax2.transData,
                      xyB =(x, y),
                      coordsB = ax1.transData)
 
con.set_color([0, 0, 0])
ax2.add_artist(con)
con.set_linewidth(4)
 
plt.show()

Producción: 

Publicación traducida automáticamente

Artículo escrito por RajuKumar19 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *