Domanda

Ho una serie di linee di segmento Ab. Punto UN si trova in [x0,y0] = [0.0] coordinarsi come punto radiale. B è la fine delle linee del segmento [x1,y1]. Ho trovato alcune risposte qui E ho cercato di adattarlo al mio problema.

La domanda: Come posso tracciare il segmento radiale che mostra che B è la fine della freccia. Perché, nelle dimensioni della freccia del mio codice, supera la finestra della trama.

Qualsiasi aiuto sarebbe apprezzato.

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)
È stato utile?

Soluzione

La mia comprensione è che stai chiedendo cosa fare quando la punta di freccia è fuori dalla trama. Ci sono alcune opzioni:

  1. Puoi disegnare la freccia fino al confine e utilizzare un tipo di testa di freccia che indica che non è l'estremità vera della freccia, come una mezza freccia. "shape"="left", o aperto contro chiuso, ecc.
  2. Puoi disegnare la punta di freccia a metà della freccia, come è fatto per un flusso. Non conosco un comando per questo in MPL, ma potresti facilmente farlo usando due frecce o semplicemente tracciare una linea e la testa di una freccia, ecc.

Modificare:Per completezza, aggiungerò la mia opinione su un n. 2. Ecco che traccia la linea, quindi traccia la freccia sulla linea e la punta della freccia può essere tracciata ovunque lungo la linea e in controllata da f (tra 0 e 1). L'esempio mostra alcune righe tracciate per f che va da 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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top