Pergunta

Eu tenho um conjunto de linhas de segmento Ab. Ponto UMA está localizado em [x0,y0] = [0.0] coordenar como ponto radial. B é o fim das linhas de segmento [x1,y1]. Eu encontrei algumas respostas aqui E eu tentei adaptá -lo ao meu problema.

A questão: Como posso plotar o segmento radial mostrando que B é o fim da seta. Porque, nos tamanhos de seta do meu código, excede a janela da plotagem.

Qualquer ajuda seria 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)
Foi útil?

Solução

Meu entendimento é que você está perguntando o que fazer quando a ponta da flecha está fora da trama. Existem algumas opções:

  1. Você pode desenhar a seta para o limite e usar um tipo de cabeça de seta que indica que não é o fim verdadeiro da flecha, como uma meia flecha, "shape"="left", ou aberto vs. fechado, etc.
  2. Você pode desenhar a ponta da seta no meio da seta, como é feito para uma linha de fluxo. Não conheço um comando para isso no MPL, mas você pode fazê -lo facilmente usando duas setas, ou apenas plotando uma linha e a cabeça de uma flecha, etc.

Editar:Para completar, adicionarei minha opinião sobre um #2. Aqui está eu plotendo a linha e depois plote a seta sobre a linha, e a ponta da seta pode ser plotada em qualquer lugar ao longo da linha e controlada por f (entre 0 e 1). O exemplo mostra algumas linhas plotadas para f variando de 0 para .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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top