Pregunta

Tengo un conjunto de líneas de segmento Abundante. Punto A Se encuentra en [x0,y0] = [0.0] Coordinar como punto radial. B es el final de las líneas de segmento [x1,y1]. Encontré algunas respuestas aquí Y traté de adaptarlo a mi problema.

La pregunta: ¿Cómo puedo trazar el segmento radial que muestra que B es el final de la flecha? Porque, en mi tamaño de flecha, los tamaños exceden la ventana de la parcela.

Cualquier ayuda sería apreciada.

import numpy as np
import pylab as pl

def arrow_segment(AB):

    for idx in range(0,len(AB)):
            plt.arrow(AB[idx,0],  #x1
                  AB[idx,1],  # y1
                  AB[idx,2]-AB[idx,0], # x2 - x1
                  AB[idx,3]-AB[idx,1], # y2 - y1
                  color='blue',head_width=0.05, head_length=0.1)
    plt.show()
AB = [[0, 0., 1., 10]]
arrow_segment(AB)
¿Fue útil?

Solución

Tengo entendido que estás preguntando qué hacer cuando la punta de flecha está fuera de la trama. Hay algunas opciones:

  1. Puede dibujar la flecha hasta el límite y usar un tipo de cabeza de flecha que indique que no es el extremo verdadero de la flecha, como un cabezal de media flecha, "shape"="left", o abierto vs. cerrado, etc.
  2. Puede dibujar la punta de flecha a mitad de camino a lo largo de la flecha, como se hace para una línea de corriente. No conozco un comando para esto en MPL, pero podría hacerlo fácilmente usando dos flechas, o simplemente trazar una línea y la cabeza de una flecha, etc.

Editar:Para completar, agregaré mi opinión sobre un #2. Aquí está trazado la línea, y luego trazar la flecha sobre la línea, y la punta de flecha se puede trazar en cualquier lugar a lo largo de la línea y en control por f (entre 0 y 1). El ejemplo muestra algunas líneas trazadas para f que van desde 0 a .1.

import numpy as np
import pylab as plt

def arrow_mh(v4, color, f=.5):
    x0, y0, x1, y1 = v4
    line = plt.plot([x0, x1], [y0, y1], color=color)

    f = max(f, .0001)
    dx = f*(x1-x0)
    dy = f*(y1-y0)
    a = plt.arrow(x0, y0, dx, dy,
          color=color,head_width=0.05, head_length=0.1)

def arrow_segment(AB):

    for idx in range(0,len(AB)):
        arrow_mh(AB[idx], 'blue', .01*(9-idx))
    plt.xlim(0, 1)
    plt.ylim(0, 1)
    plt.show()
AB = np.array([[.1*i, .1, .5, 4] for i in range(10)])
arrow_segment(AB)

enter image description here

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top