Menu
CoddyTech
flag Ar iconالعربيةdown icon

ورقة Matplotlib المرجعية

آخر تحديث

الشكل والمحاور

الشكل (figure) هو الصورة كاملة. والمحاور (axes) رسم واحد داخله، وكل الاستدعاءات أدناه تقريبًا دوال على ax .

المهمةالكود
استيراد pyplotimport matplotlib.pyplot as plt
شكل واحد فيه رسم واحدfig, ax = plt.subplots()
تحديد الحجم بالبوصةfig, ax = plt.subplots(figsize=(8, 4))
الرسم على المحاورax.plot(x, y)
عرض الشكلplt.show()
الحفظ كصورة PNG حادةfig.savefig("chart.png", dpi=150, bbox_inches="tight")
الحفظ كرسوم متجهيةfig.savefig("chart.svg"), fig.savefig("chart.pdf")
خلفية شفافةfig.savefig("chart.png", transparent=True)
إغلاق الشكل لتحرير الذاكرةplt.close(fig)
أسلوب pyplot السريع لرسم واحدplt.plot(x, y) plt.title("Quick look") plt.show()

أنواع الرسوم

المهمةالكود
مخطط خطيax.plot(x, y)
مخطط انتشارax.scatter(x, y, s=20, alpha=0.7)
انتشار ملوّن حسب القيمة مع شريط ألوانpoints = ax.scatter(x, y, c=y, cmap="viridis") fig.colorbar(points, ax=ax)
مخطط أعمدةax.bar(cats, a)
مخطط أعمدة أفقيةax.barh(cats, a)
أعمدة مكدسةax.bar(cats, a, label="2025") ax.bar(cats, b, bottom=a, label="2026")
أعمدة مجمعةpos = np.arange(len(cats)) ax.bar(pos - 0.2, a, width=0.4) ax.bar(pos + 0.2, b, width=0.4) ax.set_xticks(pos, labels=cats)
مدرج تكراريax.hist(data, bins=30)
مخطط صندوقيax.boxplot([data, data * 2], tick_labels=["A", "B"])
مخطط كماني (violin)ax.violinplot([data, data * 2])
مخطط دائريax.pie([40, 35, 25], labels=cats, autopct="%1.0f%%")
نطاق بين منحنيينax.fill_between(x, y - 0.2, y + 0.2, alpha=0.3)
أشرطة الخطأax.errorbar([1, 2, 3], [4, 5, 3], yerr=[0.5, 0.3, 0.6], fmt="o", capsize=4)
مخطط درجيax.step(x, y, where="mid")
خريطة حرارية لمصفوفة ثنائية الأبعادimage = ax.imshow(np.random.default_rng(0).random((5, 5)), cmap="magma") fig.colorbar(image, ax=ax)
مخطط كنتوري ممتلئX, Y = np.meshgrid(x, x) ax.contourf(X, Y, np.sin(X) * np.cos(Y), levels=20)
كثافة عدد كبير من النقاطax.hexbin(data, data + np.random.default_rng(1).normal(size=200), gridsize=20)
خط مرجعي أفقي أو عموديax.axhline(0, color="gray", linestyle="--"), ax.axvline(5)
تظليل نطاقax.axvspan(2, 4, alpha=0.2)

الخطوط والعلامات والألوان

المهمةالكود
اللون والعرض ونمط الخطax.plot(x, y, color="tab:red", linewidth=2, linestyle="--")
علامات على النقاطax.plot(x, y, marker="o", markersize=4)
سلسلة تنسيق مختصرةax.plot(x, y, "g--o")
الشفافيةax.plot(x, y, alpha=0.5)
أنماط الخطوط"-", "--", "-.", ":"
رموز العلامات"o", "s", "^", "x", ".", "*"
طرق تسمية اللون"tab:blue", "C1", "#1f77b4", (0.2, 0.4, 0.6)
n لونًا من خريطة ألوانcolors = plt.colormaps["viridis"](np.linspace(0, 1, 5))
دورة ألوان خاصة بكax.set_prop_cycle(color=["#0b7285", "#e8590c", "#5f3dc4"])
أعمدة بحدود وتظليل خطيax.bar(cats, a, color="white", edgecolor="black", hatch="//")

العناوين والتسميات ووسائل الإيضاح

المهمةالكود
العنوان وتسميات المحاورax.set_title("Sales"), ax.set_xlabel("Month"), ax.set_ylabel("EUR")
كلها في استدعاء واحدax.set(title="Sales", xlabel="Month", ylabel="EUR")
وسيلة إيضاح من تسميات الخطوطax.plot(x, y, label="sin") ax.legend()
موضع وسيلة الإيضاح وأعمدتهاax.legend(loc="upper right", ncols=2, frameon=False)
وسيلة الإيضاح خارج الرسمax.legend(loc="center left", bbox_to_anchor=(1, 0.5))
نص عند موضع في البياناتax.text(5, 0.5, "note")
تعليق توضيحي بسهمax.annotate("peak", xy=(1.57, 1), xytext=(3, 1.2), arrowprops=dict(arrowstyle="->"))
تسميات القيم على الأعمدةbars = ax.bar(cats, a) ax.bar_label(bars)
عنوان للشكل كاملًاfig.suptitle("Q1 report")
رموز رياضية في التسمياتax.set_xlabel(r"$\alpha$ (rad)")

المحاور والتدريجات والمقاييس

المهمةالكود
حدود المحاورax.set_xlim(0, 10), ax.set_ylim(bottom=0)
مقياس لوغاريتميax.set_yscale("log")
اختيار التدريجات وتسمياتهاax.set_xticks([0, 5, 10], labels=["start", "middle", "end"])
تدوير تسميات التدريجاتax.tick_params(axis="x", labelrotation=45)
خطوط الشبكةax.grid(True, alpha=0.3)
محور بالنسبة المئويةfrom matplotlib.ticker import PercentFormatter ax.yaxis.set_major_formatter(PercentFormatter(1.0))
فاصل الآلافax.yaxis.set_major_formatter("{x:,.0f}")
إخفاء الإطار العلوي والأيمنax.spines[["top", "right"]].set_visible(False)
محور y ثانٍ على اليمينax2 = ax.twinx() ax2.plot(x, y * 100, color="tab:orange")
المقياس نفسه على المحورينax.set_aspect("equal")
قلب محورax.invert_yaxis()
إخفاء المحاور تمامًاax.axis("off")
تسميات تواريخ مقروءةfig.autofmt_xdate()

الرسوم الفرعية والتخطيط

تُرجع plt.subplots(rows, cols) مصفوفة NumPy من المحاور. استخدم الفهرسة عليها كأي مصفوفة.

المهمةالكود
شبكة من الرسومfig, axs = plt.subplots(2, 2, figsize=(8, 6))
الرسم على أحدهاaxs[0, 1].plot(x, y)
المرور عليها كلهاfor ax in axs.flat: ax.grid(True)
مشاركة محور بين الرسومfig, axs = plt.subplots(1, 3, sharey=True)
تباعد يمنع التداخلfig, axs = plt.subplots(2, 2, layout="constrained")
إصلاح التداخل بعد الرسمfig.tight_layout()
أعمدة بعروض مختلفةfig, axs = plt.subplots(1, 2, width_ratios=[3, 1])
تخطيط مسمّى مع لوحة عريضةfig, axd = plt.subplot_mosaic([["top", "top"], ["left", "right"]]) axd["top"].plot(x, y)
رسم صغير داخل رسمinset = ax.inset_axes([0.6, 0.6, 0.35, 0.35])
إخفاء لوحة فارغةaxs[0].axis("off")

الأنماط والإعدادات الافتراضية

المهمةالكود
استخدام نمط مدمجplt.style.use("ggplot")
عرض قائمة الأنماطplt.style.available
مظهر seaborn بدون seabornplt.style.use("seaborn-v0_8-whitegrid")
نمط لشكل واحد فقطwith plt.style.context("dark_background"): fig, ax = plt.subplots()
حجم الخط الافتراضيplt.rcParams["font.size"] = 12
حجم الشكل ودقته الافتراضيانplt.rcParams["figure.figsize"] = (8, 4), plt.rcParams["figure.dpi"] = 120
العودة إلى الإعدادات الافتراضيةplt.style.use("default")
خرائط ألوان شائعة: متدرجة، متباعدة، رمادية"viridis", "coolwarm", "Greys"

الرسم من pandas

ترسم pandas باستخدام Matplotlib. مرّر ax= لترسم داخل محاورك، أو احتفظ بكائن ax الذي تُرجعه pandas.

المهمةالكود
أعمدة DataFrame داخل محاوركdf.plot(x="month", y="sales", ax=ax)
مخطط أعمدة لملخص مجموعاتdf.groupby("city")["sales"].sum().plot.bar(ax=ax)
متابعة تنسيق ما رسمته pandasax = df.plot(x="month", y="sales") ax.set_title("Sales")
الأعمدة مباشرة إلى Matplotlibax.plot(df["month"], df["sales"])

Matplotlib 3.11: الصيغ القديمة وما تكتبه الآن

الكود المنسوخ من الدروس القديمة قد يفشل أو يُظهر تحذيرات في Matplotlib 3.11. اكتب الصيغ الموجودة في عمود Matplotlib 3.11 بدلًا منه.

المهمةMatplotlib 3.11الصيغة القديمة
تسميات المخطط الصندوقيax.boxplot([data, data * 2], tick_labels=["A", "B"])labels=["A", "B"]
مخطط صندوقي أو كماني أفقيax.boxplot(data, orientation="horizontal")vert=False
الحصول على خريطة ألوانplt.colormaps["viridis"]plt.cm.get_cmap("viridis")
نمط seabornplt.style.use("seaborn-v0_8")plt.style.use("seaborn")

أكواد Matplotlib التي تحتاجها لتحويل البيانات إلى رسم بياني واضح، مرتبة حسب المهمة: الشكل والمحاور، أنواع الرسوم، الخطوط والألوان، العناوين ووسائل الإيضاح، المحاور والتدريجات، الرسوم الفرعية والتخطيط، الأنماط، والرسم من pandas. كل صف مقتطف قصير يمكنك لصقه مباشرة، مع سطر واحد يشرح ما يفعله.

كل ما هنا يستخدم الأسلوب الكائني ( fig, ax = plt.subplots() ثم استدعاء الدوال على ax ) ومكتوب لإصدار Matplotlib 3.11، وهو الإصدار الذي يشغّله Coddy. الصيغ القديمة مثل labels= في boxplot لا تظهر إلا في الجدول الأخير، بجانب ما تكتبه بدلًا منها. تستخدم الأمثلة x = np.linspace(0, 10, 50) و y = np.sin(x) وعينة من قيم التوزيع الطبيعي اسمها data . هل أنت جديد على Python نفسها؟ ابدأ بـ ورقة Python المرجعية، واحتفظ بأوراق pandas و NumPy و scikit-learn المرجعية بجانب هذه الورقة.

الأسئلة الشائعة حول ورقة Matplotlib المرجعية

هل ورقة Matplotlib المرجعية هذه مجانية؟
نعم. ورقة Matplotlib المرجعية هذه مجانية تمامًا ولا تحتاج إلى تسجيل. أضفها إلى المفضلة أو اطبعها بصيغة PDF من متصفحك، وارجع إليها متى احتجت إلى الاستدعاء الدقيق لوسيلة إيضاح أو شبكة رسوم فرعية أو شريط ألوان.
ما الفرق بين plt و ax؟
ترسم plt.plot() على المحاور الحالية أيًا كانت، وهذا سريع لرسم واحد. أما fig, ax = plt.subplots() فتعطيك الشكل والمحاور ككائنات، فترسم ax.plot() دائمًا في المكان الذي تقصده تمامًا. استخدم أسلوب ax في أي شيء فيه أكثر من رسم واحد، وفي الكود الذي ستحتفظ به.
كيف أغيّر حجم الشكل؟
مرّر figsize بالبوصة عند إنشاء الشكل: fig, ax = plt.subplots(figsize=(10, 5)) . ولتغيير القيمة الافتراضية لكل الأشكال، اضبط plt.rcParams["figure.figsize"] = (10, 5) . حجم الملف المحفوظ بالبكسل يساوي figsize مضروبًا في dpi .
كيف أحفظ رسمًا بدقة عالية؟
استدعِ fig.savefig("chart.png", dpi=300, bbox_inches="tight") . كلما ارتفعت قيمة dpi كانت صورة PNG أكثر حدة، و bbox_inches="tight" تقص الهوامش الفارغة. للطباعة أو العروض التقديمية احفظ بصيغة SVG أو PDF، فهما تبقيان حادتين بأي حجم.
لماذا تتداخل عناوين الرسوم الفرعية وتسمياتها؟
أنشئ الشكل مع layout="constrained" ، كما في plt.subplots(2, 2, layout="constrained") ، وسيترك Matplotlib مساحة للعناوين والتسميات وأشرطة الألوان. وفي شكل موجود، استدعِ fig.tight_layout() بعد الرسم.
ما إصدار Matplotlib الذي تغطيه هذه الورقة المرجعية؟
Matplotlib 3.11، وهو الإصدار الذي يشغّله Coddy. الاستدعاءات التي حذفتها الإصدارات الأحدث أو غيّرت اسمها، مثل labels= في boxplot (أصبحت الآن tick_labels= ) و plt.cm.get_cmap (أصبحت الآن plt.colormaps[...] )، موجودة في الجدول الأخير بجانب ما تكتبه بدلًا منها.
هل يمكنني تشغيل كود Matplotlib عبر الإنترنت؟
نعم. ساحة تجربة Matplotlib المجانية تشغّل Python مع Matplotlib و NumPy و pandas و scikit-learn في متصفحك وترسم أشكالك بجانب المخرجات، فيمكنك لصق أي مقتطف من هذه الورقة المرجعية ورؤية الرسم دون تثبيت أي شيء. وتستخدم دورة تعلم الآلة في Coddy هذه الرسوم لاستكشاف البيانات قبل تدريب النموذج.
رسم توضيحي للغات البرمجة في Coddy

تعلّم Matplotlib مع Coddy

ابدأ الآن