اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

الكدو الذي قمت بتجربته يقوم بتقسيم مساحة الرسم الى عدة مساحات صغيرة بجانب بعضها كالتالي:


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()

وبكلتا الطريقيتين يكون شكل الخرج كالتالي:

zZ8I7.png.406004d4f8e7126f8d09e7ede1c25974.png

لاحظ وجود رسمتين بكل صف وكل عمود.

 

  • 1
نشر

هناك طريقتين لرسم عدة رسوم بيانية الأولى باستخدام مانسميه "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 رسوم بيانية متجاورة على نفس السطر

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...