質問

セグメントラインのセットがあります ab. 。点 a に位置しています [x0,y0] = [0.0] 半径方向のポイントとして調整します。 b セグメント行の終わりです [x1,y1]. 。いくつかの答えを見つけました ここ そして、私はそれを自分の問題に適応させようとしました。

質問: Bが矢印の終わりであることを示すラジアルセグメントをプロットするにはどうすればよいですか?なぜなら、私のコードでは、矢印のサイズがプロットウィンドウを超えているからです。

助けていただければ幸いです。

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)
役に立ちましたか?

解決

私の理解では、矢印がプロットから外れているときに何をすべきかを尋ねているということです。いくつかのオプションがあります:

  1. 矢印を境界まで描き、半分の矢印の頭など、矢印の真の端ではないことを示す矢印のヘッドの種類を使用できます。 "shape"="left", 、またはオープンとクローズドなど。
  2. 矢に沿って矢印の途中で矢印を描くことができます。 MPLでこのコマンドはわかりませんが、2つの矢印を使用して簡単に実行できます。

編集:完全性のために、#2に自分のテイクを追加します。これがラインをプロットしてから、線の上に矢印をプロットすると、矢印を線に沿ってどこにでもプロットできます。 f (0から1の間)。この例は、プロットされた数本の線を示しています f 範囲から 0.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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top