Frage

Ich habe eine Reihe von Segmentlinien Ab. Punkt EIN befindet sich in [x0,y0] = [0.0] Koordinieren Sie als radialer Punkt. B ist das Ende der Segmentlinien [x1,y1]. Ich fand einige Antworten hier Und ich habe versucht, es an mein Problem anzupassen.

Die Frage: Wie kann ich radiales Segment zeichnen, das zeigt, dass b das Ende des Pfeils ist? Denn in meinen Code -Pfeilgrößen überschreitet das Plotfenster.

Jede Hilft würde geschätzt.

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)
War es hilfreich?

Lösung

Mein Verständnis ist, dass Sie fragen, was zu tun ist, wenn die Pfeilspitze aus der Handlung ist. Es gibt einige Optionen:

  1. Sie können den Pfeil an die Grenze zeichnen und eine Art Pfeilkopf verwenden, der angibt, dass es nicht das wahre Ende des Pfeils ist, z. B. einen halben Pfeilkopf. "shape"="left", oder offen gegen geschlossen, etc.
  2. Sie können die Pfeilspitze auf halbem Weg entlang des Pfeils zeichnen, wie er für eine Stromlinie erfolgt. Ich kenne einen Befehl dafür in MPL nicht, aber Sie können es einfach mit zwei Pfeilen tun oder einfach eine Linie und den Kopf eines Pfeils usw. planen.

Bearbeiten:Zur Vollständigkeit füge ich meine Einstellung zu #2 hinzu. Hier bin ich die Linie und zeichne dann den Pfeil über die Linie, und die Pfeilspitze kann überall entlang der Linie aufgetragen und in gesteuert von gesteuert werden f (zwischen 0 und 1). Das Beispiel zeigt einige Zeilen, die für aufgezeichnet sind f von 0 zu .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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top