خطوط القطاع باستخدام PL.Arrow () لإظهار الاتجاهات

StackOverflow https://stackoverflow.com/questions/20353726

  •  25-08-2022
  •  | 
  •  

سؤال

لدي مجموعة من خطوط القطاع أب. نقطة أ يقع في [x0,y0] = [0.0] التنسيق كنقطة شعاعية. ب هي نهاية خطوط القطاع [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. إليكم رسم الخط ، ثم أرسم السهم فوق الخط ، ويمكن رسم رأس السهم في أي مكان على طول الخط والتحكم فيه بواسطة 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