0Pricing
Pandas & NumPy Academy · درس

المخططات الشريطية والمدرجات التكرارية

اعرض تكرارات الفئات باستخدام ax.bar() وتوزيعات البيانات باستخدام ax.hist()، مع ضبط عدد الفئات ولون الحواف.

المخططات الشريطية والمدرجات التكرارية درس مجاني في Pandas & NumPy Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Pandas & NumPy Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.

مخططات الأعمدة والمدرجات التكرارية

تعرض مخططات الأعمدة البيانات الفئوية: عمودًا واحدًا لكل فئة، ويكون ارتفاع العمود متناسبًا مع القيمة. وهي تجيب عن السؤال: «ما مقدار ما تملكه كل فئة؟». أما المدرجات التكرارية فتعرض توزيع متغير عددي مستمر؛ إذ تُقسّم البيانات إلى فواصل، ويُظهر ارتفاع العمود العدد أو التكرار في كل فاصل. وهي تجيب عن السؤال: «كيف تتوزع هذه القيم؟». ويستخدم النوعان ax.bar() وax.hist() على التوالي.

استخدام ax.bar() لمخططات الأعمدة الرأسية

ترسم ax.bar(x, height) مخطط أعمدة رأسيًا، حيث يمثّل x تسلسل مواضع الفئات (أو تسمياتها)، ويمثّل height قيمة العمود. ومن المعلمات الأساسية: width (قيمتها الافتراضية 0.8، وتتحكم في عرض العمود نسبةً إلى الفجوة)، وcolor، وedgecolor، وalign ('center' أو 'edge'). وتُرجع قائمة من كائنات Artist من نوع Rectangle.

import matplotlib.pyplot as plt
import numpy as np

categories = ['East', 'West', 'North', 'South']
values = [420, 380, 310, 290]

fig, ax = plt.subplots(figsize=(7, 4))
ax.bar(categories, values, color='steelblue', edgecolor='white', width=0.6)
ax.set_title('Regional Revenue')
ax.set_xlabel('Region')
ax.set_ylabel('Revenue (USD)')
# plt.show()
plt.close()

تخصيص مظهر الأعمدة

تجعل بعض التخصيصات مخططات الأعمدة أسهل قراءة بدرجة كبيرة: استخدم لونًا مميزًا واحدًا لجميع الأعمدة (أو مصفوفة ألوان للتمييز بين الأعمدة)، وأضف تسميات القيم فوق كل عمود باستخدام ax.bar_label()، وتحكم في عرض الأعمدة لترك مسافة مناسبة، واضبط ax.set_ylim(0, max * 1.15) لمنح التسميات مساحة فوق أطول عمود.

fig, ax = plt.subplots(figsize=(7, 4))
bars = ax.bar(categories, values, color='steelblue', edgecolor='white', width=0.6)

# Add value labels above bars
ax.bar_label(bars, fmt='%d', padding=3, fontsize=10)

# Give space above bars for labels
ax.set_ylim(0, max(values) * 1.15)
ax.set_title('Regional Revenue')
plt.tight_layout()
plt.close()

مخططات الأعمدة الأفقية باستخدام ax.barh()

استخدم ax.barh(y, width) لمخططات الأعمدة الأفقية. وتُفضّل الأعمدة الأفقية عندما تكون تسميات الفئات طويلة (إذ تُقرأ طبيعيًا من اليسار إلى اليمين) أو عندما تكون الفئات كثيرة (إذ تتراص بشكل أكثر إحكامًا). وتنطبق جميع معلمات التخصيص نفسها: تتحكم height في سُمك العمود، وتضيف ax.barh_label() (أو ax.bar_label()) تسميات نصية.

import pandas as pd
df = pd.DataFrame({'region': categories, 'revenue': values})
df_sorted = df.sort_values('revenue')

fig, ax = plt.subplots(figsize=(7, 4))
ax.barh(df_sorted['region'], df_sorted['revenue'],
        color='steelblue', edgecolor='white', height=0.5)
ax.set_title('Revenue by Region (Sorted)')
ax.set_xlabel('Revenue (USD)')
plt.tight_layout()
plt.close()

مخططات الأعمدة المجمّعة

لمقارنة مجموعات متعددة جنبًا إلى جنب، أنشئ مخطط أعمدة مجمّعة بإزاحة مواضع الأعمدة يدويًا. احسب المواضع المركزية لكل مجموعة، ثم اطرح إزاحة ثابتة لكل مجموعة فرعية أو أضفها. يجب أن يساوي مجموع عرض العمود والفجوة بين المجموعات 1.0 حتى لا تتداخل الأعمدة. يؤدي ضبط ax.set_xticks() إلى توسيط تسميات علامات التدريج بين الأعمدة المجمّعة.

products = ['A', 'B', 'C']
q1 = [80, 120, 95]
q2 = [90, 110, 105]

x = np.arange(len(products))
width = 0.35

fig, ax = plt.subplots(figsize=(7, 4))
ax.bar(x - width/2, q1, width, label='Q1', color='steelblue')
ax.bar(x + width/2, q2, width, label='Q2', color='coral')

ax.set_xticks(x)
ax.set_xticklabels(products)
ax.legend()
ax.set_title('Q1 vs Q2 Sales by Product')
plt.close()

مخططات الأعمدة المتراصّة

تُظهر الأعمدة المتراصّة تكوين إجمالي عبر عدة مجموعات فرعية. وتبدأ أعمدة المجموعة الثانية من حيث تنتهي أعمدة المجموعة الأولى، باستخدام المعلمة bottom. ويكون bottom لكل طبقة لاحقة هو المجموع التراكمي لجميع الطبقات السابقة. وتفيد الأعمدة المتراصّة في إظهار الإجمالي ومساهمة كل مكوّن في الوقت نفسه.

q1_arr = np.array(q1)
q2_arr = np.array(q2)

fig, ax = plt.subplots(figsize=(7, 4))
ax.bar(products, q1_arr, label='Q1', color='steelblue')
ax.bar(products, q2_arr, bottom=q1_arr, label='Q2', color='coral')

ax.legend()
ax.set_title('Stacked Q1 + Q2 Sales by Product')
ax.set_ylabel('Total Sales')
plt.close()

استخدام ax.hist() للمدرجات التكرارية

تنشئ ax.hist(data, bins) مدرجًا تكراريًا. وتتحكم المعلمة bins في عدد الفواصل المتساوية العرض التي تُقسّم البيانات إليها (وقيمتها الافتراضية 10). ويمكنك أيضًا تمرير قائمة بحدود الفواصل لإنشاء فواصل غير متساوية. ومن المعلمات الأساسية: تعمل density=True على تطبيع المدرج التكراري إلى كثافة احتمالية، وتضيف edgecolor حدودًا بين الأعمدة، بينما تتحكم color وalpha في المظهر.

np.random.seed(42)
data = np.random.randn(500)  # 500 samples from standard normal

fig, ax = plt.subplots(figsize=(7, 4))
ax.hist(data, bins=30, color='steelblue', edgecolor='white', alpha=0.7)
ax.set_title('Distribution of Values')
ax.set_xlabel('Value')
ax.set_ylabel('Count')
plt.close()

اختيار عدد الفواصل

يؤثر عدد الفئات بدرجة كبيرة في شكل المدرج التكراري. فقلة الفئات تخفي البنية، بينما تؤدي كثرتها إلى ظهور قمم مشوشة. ومن القواعد الإرشادية الشائعة: قاعدة Sturges ‏(≈ log2(n) + 1)، وقاعدة Scott، أو قاعدة Freedman-Diaconis. يدعم Matplotlib هذه الخيارات على هيئة سلاسل نصية: bins='auto'، وbins='scott'، وbins='fd'. في التحليل الاستكشافي، جرّب عدة قيم يدويًا؛ أما في العروض التقديمية، فاختر عدد الفئات الذي يوضح الشكل بأفضل صورة.

fig, axes = plt.subplots(1, 3, figsize=(12, 4))

for ax, b in zip(axes, [5, 30, 'auto']):
    ax.hist(data, bins=b, edgecolor='white', color='steelblue', alpha=0.7)
    ax.set_title(f'bins={b}')
    ax.set_xlabel('Value')

plt.tight_layout()
plt.close()

مدرجات تكرارية متراكبة للمقارنة

لمقارنة توزيعين على المحاور نفسها، استدعِ ax.hist() مرتين باستخدام بيانات وألوان مختلفة. استخدم alpha=0.5 لكليهما حتى يظهر التداخل. أضف التسميات ثم استدعِ ax.legend(). يؤدي استخدام density=True إلى تطبيع المدرجين التكراريين إلى المقياس نفسه عندما يختلف حجما العينتين، مما يجعل شكليهما قابلين للمقارنة مباشرة.

group_a = np.random.randn(300)
group_b = np.random.randn(300) + 1.5  # shifted right

fig, ax = plt.subplots(figsize=(7, 4))
ax.hist(group_a, bins=25, alpha=0.5, color='steelblue', label='Group A', density=True)
ax.hist(group_b, bins=25, alpha=0.5, color='coral', label='Group B', density=True)
ax.legend()
ax.set_title('Distribution Comparison')
plt.close()

رسم Pandas Series وDataFrames

يتوفر كل من .plot.bar() و.plot.hist() بوصفهما طريقتين لـ DataFrame وSeries، وينتجان أشكال Matplotlib تلقائيًا. ويقبلان معامل ax للرسم على كائن Axes موجود. وهذه أسرع طريقة لإنشاء مخططات أعمدة من بيانات Pandas المجمعة: احسب التجميع باستخدام groupby، ثم استدعِ .plot.bar() على النتيجة، وبعد ذلك خصّص كائن Axes المُعاد.

import pandas as pd
import numpy as np

df_sales = pd.DataFrame({
    'region': ['East', 'West', 'North', 'South'],
    'revenue': [420, 380, 310, 290]
}).set_index('region')

fig, ax = plt.subplots(figsize=(7, 4))
df_sales['revenue'].plot.bar(ax=ax, color='steelblue', rot=0)
ax.set_title('Revenue by Region')
plt.tight_layout()
plt.close()

اختيار المخطط العمودي أو المدرج التكراري

يعتمد الاختيار بين المخطط العمودي والمدرج التكراري على نوع بياناتك. استخدم مخططًا عموديًا عندما يمثل المحور x فئات مميزة غير مرتبة (مثل أسماء المنتجات والمناطق وشرائح المستخدمين)، بحيث تمثل الأعمدة القيم المجمعة لكل فئة. واستخدم مدرجًا تكراريًا عندما يكون المحور x متغيرًا رقميًا مستمرًا وتريد إظهار كيفية توزع القيم ضمن نطاق معين. ويُعد الخلط بينهما خطأً شائعًا في التصور البياني، إذ يضلل القراء بشأن نوع البيانات.

# Bar chart: categorical x-axis (product names)
products = ['Widget', 'Gadget', 'Doohickey']
revenue = [500, 300, 200]
fig, ax = plt.subplots(figsize=(5, 3))
ax.bar(products, revenue, color='steelblue')
ax.set_title('Revenue per Product (Bar Chart)')
plt.close()

# Histogram: continuous x-axis (order sizes)
order_sizes = np.random.exponential(scale=50, size=300)
fig, ax = plt.subplots(figsize=(5, 3))
ax.hist(order_sizes, bins=20, color='coral', edgecolor='white')
ax.set_title('Distribution of Order Sizes (Histogram)')
plt.close()

تحقق سريع

اختبر فهمك للمخططات العمودية والمدرجات التكرارية من هذا الدرس.

مراجعة الدرس

تعلمت في هذا الدرس أن: ax.bar() ينشئ مخططات عمودية رأسية، بينما ينشئ ax.barh() مخططات عمودية أفقية؛ ويتيح bottom إنشاء أعمدة مكدسة؛ وينشئ ax.hist() مدرجات تكرارية يتحكم bins في عدد فئاتها؛ كما يعمل density=True على تطبيع المدرجات التكرارية لإجراء مقارنة عادلة. في الخطوة التالية، سنضيف تسميات المحاور والعناوين، ونحفظ أشكالًا عالية الجودة مناسبة للنشر.

الأسئلة الشائعة

هل درس «المخططات الشريطية والمدرجات التكرارية» مجاني؟

نعم — نص درس «المخططات الشريطية والمدرجات التكرارية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Pandas & NumPy Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.

ماذا ستتعلم في «المخططات الشريطية والمدرجات التكرارية»؟

اعرض تكرارات الفئات باستخدام ax.bar() وتوزيعات البيانات باستخدام ax.hist()، مع ضبط عدد الفئات ولون الحواف. تتمرن على Pandas & NumPy Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Pandas & NumPy Academy؟

لا تُشترط خبرة سابقة. Pandas & NumPy Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «المخططات الشريطية والمدرجات التكرارية»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Pandas & NumPy Academy هذا؟

نعم. كل درس في Pandas & NumPy Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. بنية Figure وAxes
  2. المخططات الخطية والبعثرية
  3. المخططات الشريطية والمدرجات التكرارية
  4. التسميات والعناوين وحفظ الأشكال
← العودة إلى Pandas & NumPy Academy