Matplotlib Cheat Sheet: דף עזר ל-Matplotlib
עודכן לאחרונה
Figure ו-axes
Figure הוא התמונה כולה. Axes הוא גרף אחד בתוכה, וכמעט כל קריאה למטה היא מתודה על ax.
| משימה | קוד |
|---|---|
| ייבוא pyplot | import matplotlib.pyplot as plt |
| Figure אחד עם גרף אחד | fig, ax = plt.subplots() |
| קביעת הגודל באינצ'ים | fig, ax = plt.subplots(figsize=(8, 4)) |
| שרטוט על ה-axes | ax.plot(x, y) |
| הצגת ה-figure | 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) |
| סגירת figure כדי לפנות זיכרון | 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) |
| פיזור צבוע לפי ערך, עם color bar | 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) |
| Box plot | ax.boxplot([data, data * 2], tick_labels=["A", "B"]) |
| Violin plot | 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) |
| Error bars | 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") |
| Heatmap של מערך דו-ממדי | 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) |
קווים, markers וצבעים
| משימה | קוד |
|---|---|
| צבע, עובי וסגנון קו | ax.plot(x, y, color="tab:red", linewidth=2, linestyle="--") |
| Markers על הנקודות | ax.plot(x, y, marker="o", markersize=4) |
| מחרוזת פורמט מקוצרת | ax.plot(x, y, "g--o") |
| שקיפות | ax.plot(x, y, alpha=0.5) |
| סגנונות קו | "-", "--", "-.", ":" |
| קודים של markers | "o", "s", "^", "x", ".", "*" |
| דרכים לציין צבע | "tab:blue", "C1", "#1f77b4", (0.2, 0.4, 0.6) |
| n צבעים מתוך colormap | 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="//") |
כותרות, תוויות ו-legend
| משימה | קוד |
|---|---|
| כותרת ותוויות צירים | ax.set_title("Sales"), ax.set_xlabel("Month"), ax.set_ylabel("EUR") |
| הכול בקריאה אחת | ax.set(title="Sales", xlabel="Month", ylabel="EUR") |
| Legend מתוויות הקווים | ax.plot(x, y, label="sin")
ax.legend() |
| מיקום ה-legend ועמודות | ax.legend(loc="upper right", ncols=2, frameon=False) |
| Legend מחוץ לגרף | 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) |
| כותרת ל-figure כולו | fig.suptitle("Q1 report") |
| נוסחאות מתמטיות בתוויות | ax.set_xlabel(r"$\alpha$ (rad)") |
צירים, ticks וסקאלות
| משימה | קוד |
|---|---|
| גבולות הצירים | ax.set_xlim(0, 10), ax.set_ylim(bottom=0) |
| סקאלה לוגריתמית | ax.set_yscale("log") |
| בחירת ticks והתוויות שלהם | ax.set_xticks([0, 5, 10], labels=["start", "middle", "end"]) |
| סיבוב תוויות ה-ticks | 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() |
Subplots ופריסה
plt.subplots(rows, cols) מחזיר מערך NumPy של axes. גשו אליו עם אינדקס כמו לכל מערך.
| משימה | קוד |
|---|---|
| רשת של גרפים | 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 בלי seaborn | plt.style.use("seaborn-v0_8-whitegrid") |
| סגנון ל-figure אחד בלבד | with plt.style.context("dark_background"):
fig, ax = plt.subplots() |
| גודל גופן ברירת מחדל | plt.rcParams["font.size"] = 12 |
| גודל ורזולוציה ברירת מחדל ל-figure | plt.rcParams["figure.figsize"] = (8, 4), plt.rcParams["figure.dpi"] = 120 |
| חזרה לברירות המחדל | plt.style.use("default") |
| Colormaps נפוצים: רציף, מתפצל, אפור | "viridis", "coolwarm", "Greys" |
גרפים מתוך pandas
pandas משרטט בעזרת Matplotlib. העבירו ax= כדי לשרטט לתוך ה-axes שלכם, או שמרו את ה-ax ש-pandas מחזיר.
| משימה | קוד |
|---|---|
| עמודות DataFrame לתוך ה-axes שלכם | df.plot(x="month", y="sales", ax=ax) |
| גרף עמודות של סיכום לפי קבוצה | df.groupby("city")["sales"].sum().plot.bar(ax=ax) |
| המשך עיצוב של מה ש-pandas שרטט | ax = df.plot(x="month", y="sales")
ax.set_title("Sales") |
| עמודות ישירות לתוך Matplotlib | ax.plot(df["month"], df["sales"]) |
Matplotlib 3.11: צורות ישנות ומה לכתוב היום
קוד שהועתק ממדריכים ישנים עלול להיכשל או להציג אזהרות ב-Matplotlib 3.11. כתבו במקום זאת את הצורות שבעמודת Matplotlib 3.11.
| משימה | Matplotlib 3.11 | צורה ישנה |
|---|---|---|
| תוויות ל-box plot | ax.boxplot([data, data * 2], tick_labels=["A", "B"]) | labels=["A", "B"] |
| Box plot או violin plot אופקי | ax.boxplot(data, orientation="horizontal") | vert=False |
| קבלת colormap | plt.colormaps["viridis"] | plt.cm.get_cmap("viridis") |
| סגנון seaborn | plt.style.use("seaborn-v0_8") | plt.style.use("seaborn") |
קוד ה-Matplotlib שצריך כדי להפוך נתונים לגרף ברור, מסודר לפי משימה: figure ו-axes, סוגי גרפים, קווים וצבעים, כותרות ו-legend, צירים ו-ticks, subplots ופריסה, סגנונות, ושרטוט מתוך 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 cheat sheet, ושמרו את דפי העזר של pandas, NumPy ו-scikit-learn לצד הדף הזה.
שאלות נפוצות על ה-Matplotlib Cheat Sheet
האם ה-Matplotlib cheat sheet הזה חינמי?
מה ההבדל בין plt ל-ax?
plt.plot() משרטט על ה-axes הנוכחי, מה שמהיר לגרף בודד. fig, ax = plt.subplots() נותן לכם את ה-figure וה-axes כאובייקטים, כך ש-ax.plot() תמיד משרטט בדיוק איפה שהתכוונתם. השתמשו בסגנון ה-ax לכל דבר עם יותר מגרף אחד, ולקוד שאתם מתכוונים לשמור.איך משנים את הגודל של ה-figure?
figsize באינצ'ים כשאתם יוצרים את ה-figure: fig, ax = plt.subplots(figsize=(10, 5)). כדי לשנות את ברירת המחדל לכל figure, הגדירו plt.rcParams["figure.figsize"] = (10, 5). הגודל בפיקסלים של קובץ שנשמר הוא figsize כפול dpi.איך שומרים גרף ברזולוציה גבוהה?
fig.savefig("chart.png", dpi=300, bbox_inches="tight"). dpi גבוה יותר נותן PNG חד יותר, ו-bbox_inches="tight" חותך שוליים ריקים. להדפסה או למצגות, שמרו כ-SVG או PDF, שנשארים חדים בכל גודל.למה הכותרות והתוויות של ה-subplots שלי חופפות?
layout="constrained", כמו ב-plt.subplots(2, 2, layout="constrained"), ו-Matplotlib יפנה מקום לכותרות, לתוויות ול-color bars. על figure קיים, קראו ל-fig.tight_layout() אחרי השרטוט.באיזו גרסה של Matplotlib דף העזר הזה עוסק?
labels= ב-boxplot (היום tick_labels=) ו-plt.cm.get_cmap (היום plt.colormaps[...]), נמצאות בטבלה האחרונה לצד מה שצריך לכתוב במקומן.