Mohamed Elnemr نشر 14 سبتمبر 2021 أرسل تقرير نشر 14 سبتمبر 2021 أحاول رسم عدة رسومات بيانية بجانب بعضها في matplot، حاولت بالكود التالي لكن لم يفلح: fig = plt.figure() axes = fig.subplots(nrows=2, ncols=2) كيف يمكنني فعل هذا؟ 2 اقتباس
0 Ahmed Sharshar نشر 14 سبتمبر 2021 أرسل تقرير نشر 14 سبتمبر 2021 الكدو الذي قمت بتجربته يقوم بتقسيم مساحة الرسم الى عدة مساحات صغيرة بجانب بعضها كالتالي: fig, ax = plt.subplots(2, 2) مثلا الكود السابق سيتيح لك رسم شكلين بيانيين في الصف ومثلهما في العمود. الكود التالي يوضح مثالا لكيفية رسم عدة رسومات بجانب بعضها: import matplotlib.pyplot as plt x = range(10) y = range(10) fig, ax = plt.subplots(nrows=2, ncols=2) for row in ax: for col in row: col.plot(x, y) plt.show() وهو كود مختصر عوضا عن أن تقوم بتحديد مكان كل رسمة وعناصرها كالتالي: fig = plt.figure() plt.subplot(2, 2, 1) plt.plot(x, y) plt.subplot(2, 2, 2) plt.plot(x, y) plt.subplot(2, 2, 3) plt.plot(x, y) plt.subplot(2, 2, 4) plt.plot(x, y) plt.show() وبكلتا الطريقيتين يكون شكل الخرج كالتالي: لاحظ وجود رسمتين بكل صف وكل عمود. اقتباس
1 Ali Haidar Ahmad نشر 14 سبتمبر 2021 أرسل تقرير نشر 14 سبتمبر 2021 هناك طريقتين لرسم عدة رسوم بيانية الأولى باستخدام مانسميه "superimposition" أي وضع كل الرسوم ضمن plot واحد أي نقوم بتركيبها: import math import matplotlib.pyplot as plt import numpy # إنشاء مصفوفة data = numpy.arange(0, math.pi*2, 0.03) # y تعيين قيم للمحور # التابع الأول func1 = numpy.sin(data) # التابع الثاني func2 = numpy.cos(data) # رسمهما plt.plot(data, func1, label='sin',color='r') plt.plot(data, func2, label='cos', color='b') # إعطاء اسم للمحول السيني plt.xlabel("Angle") # للمحور العيني plt.ylabel("Magnitude") # للرسم البياني plt.title("My graph") # ألعرض plt.show() # قم بتشغيل الكود وستظهر لك النتائج الطريقة الثانية استخدام الدالة subplot التي ذكرها الأستاذ أحمد. والطريقة الثالثة هي استخدام subplot2grid وهي مشابهة لحدما للدالة subplot لكنها تعطيك مرونة أكبر في التعامل مع المخططات: matplotlib.pyplot.subplot2grid(shape, loc, rowspan=1, colspan=1, fig=None, **kwargs) حيث أن الوسيط الأول هو عبارة عن أبعاد shape ال grid (الشبكة) التي سنضع ضمنها محاور الرسم البياني (الغراف). أما الوسيط الثاني فهو يحدد أين سيتم وضع كل غراف ضمن ال grid فمثلاً لو حددنا أن الشبكة أبعادها 3*3 هذا يعني أنه سيكون لدينا 9 أماكن لنضع الرسوم فيها وهم (0,0) (0,1) (0,2) (1,2) (1,1) (1,2) (2,0) (2,1) (2,0). وهذه الأبعاد مرنة للغاية أي يمكنك التلاعب بها كيفما شئت. الوسيط الثالث هو عدد الصفوف المحور التي نريدها أن تمتد إلى الأسفل. أما الوسيط الرابع عدد أعمدة المحور التي نريدها أن تمتد إلى اليمين. (يجب عليك التجريب لتفهم أكثر). مثال: import numpy as np import math import matplotlib.pyplot as plt # إنشاء قيم للمحور السيني x = np.arange(0, 10) plot1 = plt.subplot2grid((3, 3), (0, 0)) #3*3 أي سنضع الرسمة في السطر الأول من العمود الأول من الشبكة ذات الأبعاد plot1.plot(x, np.exp(x)) plot1.set_title('EXP') plot2 = plt.subplot2grid((3, 3), (0, 1)) plot2.plot(x, x**0.5) plot2.set_title('S_ROOT') plot3 = plt.subplot2grid((3, 3), (0, 2)) plot3.plot(x, x*x) plot3.set_title('SQU') # تجميعها وعرضها plt.tight_layout() plt.show() # سيكون الناتج هو 3 رسوم بيانية متجاورة على نفس السطر اقتباس
السؤال
Mohamed Elnemr
أحاول رسم عدة رسومات بيانية بجانب بعضها في matplot، حاولت بالكود التالي لكن لم يفلح:
كيف يمكنني فعل هذا؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.