Matplotlib में दो लाइन्स के बीच एंगल प्लॉट करने का सर्वोत्तम तरीका Arc क्लास का उपयोग करके एंगल आर्क बनाना है जो बीच में एंगल प्लॉट करता है।
चरण
- फिगर का आकार सेट करें और सबप्लॉट्स के बीच पैडिंग एडजस्ट करें।
- figure() मेथड का उपयोग करके नया फिगर बनाएं या मौजूदा फिगर एक्टिवेट करें।
- add_subplot() मेथड का उपयोग करके फिगर में '~.axes.Axes' को सबप्लॉट अरेंजमेंट के हिस्से के रूप में जोड़ें।
- 2D लाइन इंस्टेंसेज l1 और l2 बनाएं।
- करंट एक्सिस में लाइन्स जोड़ें।
- एंगल प्लॉट करने के लिए यूजर-डिफाइंड मेथड कॉल करें जो एलिप्टिकल आर्क रिटर्न करता है। आर्क लंबाई लाइन्स के स्लोप्स का उपयोग करके बनाई जा सकती है।
- add_patch() मेथड का उपयोग करके आर्टिस्ट, यानी arc जोड़ें।
- फिगर डिस्प्ले करने के लिए show() मेथड का उपयोग करें।
उदाहरण
from matplotlib import pyplot as plt, patches
import math
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
def angle_plot(line1, line2, offset=1.0, color=None, origin=(0, 0), len_x_axis=1, len_y_axis=1):
xy1 = line1.get_xydata()
xy2 = line2.get_xydata()
slope1 = (xy1[1][1] - xy1[0][1]) / float(xy1[1][0] - xy1[0][0])
angle1 = abs(math.degrees(math.atan(slope1)))
slope2 = (xy2[1][1] - xy2[0][1]) / float(xy2[1][0] - xy2[0][0])
angle2 = abs(math.degrees(math.atan(slope2)))
theta1 = min(angle1, angle2)
theta2 = max(angle1, angle2)
angle = theta2 - theta1
if color is None:
color = line1.get_color()
return patches.Arc(origin, len_x_axis * offset, len_y_axis * offset, 0, theta1, theta2, color=color, label=str(angle) + u"\u00b0")
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
l1 = plt.Line2D([0, 1], [0, 4], linewidth=1, linestyle="-", color="green")
l2 = plt.Line2D([0, 4.5], [0, 3], linewidth=1, linestyle="-", color="red")
ax.add_line(l1)
ax.add_line(l2)
angle = angle_plot(l1, l2, 0.25)
ax.add_patch(angle)
plt.show()
आउटपुट
दो लाइन्स (हरी और लाल) और उनके बीच का एंगल आर्क दिखाई देगा जिसमें एंगल मान डिग्री में लेबल होगा।