Menu
CoddyTech

Cheat sheet Matplotlib

Cập nhật lần cuối

Figure và axes

Figure là toàn bộ hình ảnh. Axes là một biểu đồ nằm trong đó, và gần như mọi lệnh dưới đây là phương thức của ax.

Việc cần làmCode
Import thư viện pyplotimport matplotlib.pyplot as plt
Một figure với một biểu đồfig, ax = plt.subplots()
Đặt kích thước theo inchfig, ax = plt.subplots(figsize=(8, 4))
Vẽ lên axesax.plot(x, y)
Hiển thị figureplt.show()
Lưu thành PNG sắc nétfig.savefig("chart.png", dpi=150, bbox_inches="tight")
Lưu dạng đồ họa vectorfig.savefig("chart.svg"), fig.savefig("chart.pdf")
Nền trong suốtfig.savefig("chart.png", transparent=True)
Đóng figure để giải phóng bộ nhớplt.close(fig)
Kiểu pyplot nhanh cho một biểu đồplt.plot(x, y) plt.title("Quick look") plt.show()

Các loại biểu đồ

Việc cần làmCode
Biểu đồ đườngax.plot(x, y)
Biểu đồ phân tánax.scatter(x, y, s=20, alpha=0.7)
Biểu đồ phân tán tô màu theo giá trị, kèm thanh màupoints = ax.scatter(x, y, c=y, cmap="viridis") fig.colorbar(points, ax=ax)
Biểu đồ cộtax.bar(cats, a)
Biểu đồ cột ngangax.barh(cats, a)
Cột chồngax.bar(cats, a, label="2025") ax.bar(cats, b, bottom=a, label="2026")
Cột nhómpos = 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)
Biểu đồ histogramax.hist(data, bins=30)
Biểu đồ hộp (box plot)ax.boxplot([data, data * 2], tick_labels=["A", "B"])
Biểu đồ violinax.violinplot([data, data * 2])
Biểu đồ trònax.pie([40, 35, 25], labels=cats, autopct="%1.0f%%")
Dải giữa hai đường congax.fill_between(x, y - 0.2, y + 0.2, alpha=0.3)
Thanh sai sốax.errorbar([1, 2, 3], [4, 5, 3], yerr=[0.5, 0.3, 0.6], fmt="o", capsize=4)
Biểu đồ bậc thangax.step(x, y, where="mid")
Heatmap của mảng 2 chiềuimage = ax.imshow(np.random.default_rng(0).random((5, 5)), cmap="magma") fig.colorbar(image, ax=ax)
Biểu đồ đường đồng mức tô màuX, Y = np.meshgrid(x, x) ax.contourf(X, Y, np.sin(X) * np.cos(Y), levels=20)
Mật độ của nhiều điểmax.hexbin(data, data + np.random.default_rng(1).normal(size=200), gridsize=20)
Đường tham chiếu ngang hoặc dọcax.axhline(0, color="gray", linestyle="--"), ax.axvline(5)
Tô một khoảngax.axvspan(2, 4, alpha=0.2)

Đường, điểm đánh dấu và màu sắc

Việc cần làmCode
Màu, độ dày và kiểu đườngax.plot(x, y, color="tab:red", linewidth=2, linestyle="--")
Đánh dấu các điểmax.plot(x, y, marker="o", markersize=4)
Chuỗi định dạng viết tắtax.plot(x, y, "g--o")
Độ trong suốtax.plot(x, y, alpha=0.5)
Kiểu đường"-", "--", "-.", ":"
Mã điểm đánh dấu"o", "s", "^", "x", ".", "*"
Các cách gọi tên màu"tab:blue", "C1", "#1f77b4", (0.2, 0.4, 0.6)
n màu từ một colormapcolors = plt.colormaps["viridis"](np.linspace(0, 1, 5))
Chu kỳ màu của riêng bạnax.set_prop_cycle(color=["#0b7285", "#e8590c", "#5f3dc4"])
Cột có viền và gạch chéoax.bar(cats, a, color="white", edgecolor="black", hatch="//")

Tiêu đề, nhãn và chú giải

Việc cần làmCode
Tiêu đề và nhãn trụcax.set_title("Sales"), ax.set_xlabel("Month"), ax.set_ylabel("EUR")
Tất cả trong một lệnhax.set(title="Sales", xlabel="Month", ylabel="EUR")
Chú giải từ nhãn của đườngax.plot(x, y, label="sin") ax.legend()
Vị trí và số cột của chú giảiax.legend(loc="upper right", ncols=2, frameon=False)
Chú giải nằm ngoài biểu đồax.legend(loc="center left", bbox_to_anchor=(1, 0.5))
Chữ tại một vị trí dữ liệuax.text(5, 0.5, "note")
Chú thích kèm mũi tênax.annotate("peak", xy=(1.57, 1), xytext=(3, 1.2), arrowprops=dict(arrowstyle="->"))
Nhãn giá trị trên cộtbars = ax.bar(cats, a) ax.bar_label(bars)
Tiêu đề cho cả figurefig.suptitle("Q1 report")
Công thức toán trong nhãnax.set_xlabel(r"$\alpha$ (rad)")

Trục, vạch chia và thang đo

Việc cần làmCode
Giới hạn trụcax.set_xlim(0, 10), ax.set_ylim(bottom=0)
Thang logaritax.set_yscale("log")
Chọn vạch chia và nhãn của chúngax.set_xticks([0, 5, 10], labels=["start", "middle", "end"])
Xoay nhãn vạch chiaax.tick_params(axis="x", labelrotation=45)
Đường lướiax.grid(True, alpha=0.3)
Trục phần trămfrom matplotlib.ticker import PercentFormatter ax.yaxis.set_major_formatter(PercentFormatter(1.0))
Dấu phân cách hàng nghìnax.yaxis.set_major_formatter("{x:,.0f}")
Ẩn viền trên và viền phảiax.spines[["top", "right"]].set_visible(False)
Trục y thứ hai bên phảiax2 = ax.twinx() ax2.plot(x, y * 100, color="tab:orange")
Cùng tỷ lệ trên hai trụcax.set_aspect("equal")
Đảo ngược một trụcax.invert_yaxis()
Ẩn hoàn toàn các trụcax.axis("off")
Nhãn ngày dễ đọcfig.autofmt_xdate()

Subplot và bố cục

plt.subplots(rows, cols) trả về một mảng NumPy chứa các axes. Truy cập nó theo chỉ số như một mảng.

Việc cần làmCode
Lưới biểu đồfig, axs = plt.subplots(2, 2, figsize=(8, 6))
Vẽ lên một ô trong lướiaxs[0, 1].plot(x, y)
Lặp qua tất cả các ôfor ax in axs.flat: ax.grid(True)
Dùng chung một trục giữa các biểu đồfig, axs = plt.subplots(1, 3, sharey=True)
Khoảng cách tránh bị chồng lên nhaufig, axs = plt.subplots(2, 2, layout="constrained")
Sửa chỗ chồng nhau sau khi vẽfig.tight_layout()
Các cột có độ rộng khác nhaufig, axs = plt.subplots(1, 2, width_ratios=[3, 1])
Bố cục có tên với một ô rộngfig, axd = plt.subplot_mosaic([["top", "top"], ["left", "right"]]) axd["top"].plot(x, y)
Biểu đồ nhỏ bên trong một biểu đồinset = ax.inset_axes([0.6, 0.6, 0.35, 0.35])
Ẩn một ô trốngaxs[0].axis("off")

Style và giá trị mặc định

Việc cần làmCode
Dùng một style có sẵnplt.style.use("ggplot")
Liệt kê các styleplt.style.available
Giao diện kiểu seaborn mà không cần seabornplt.style.use("seaborn-v0_8-whitegrid")
Style chỉ cho một figurewith plt.style.context("dark_background"): fig, ax = plt.subplots()
Cỡ chữ mặc địnhplt.rcParams["font.size"] = 12
Kích thước và độ phân giải mặc định của figureplt.rcParams["figure.figsize"] = (8, 4), plt.rcParams["figure.dpi"] = 120
Trở về mặc địnhplt.style.use("default")
Các colormap thường dùng: tuần tự, phân kỳ, xám"viridis", "coolwarm", "Greys"

Vẽ biểu đồ từ pandas

pandas vẽ biểu đồ bằng Matplotlib. Truyền ax= để vẽ vào axes của bạn, hoặc giữ lại ax mà pandas trả về.

Việc cần làmCode
Vẽ các cột DataFrame vào axes của bạndf.plot(x="month", y="sales", ax=ax)
Biểu đồ cột của bảng tổng hợp theo nhómdf.groupby("city")["sales"].sum().plot.bar(ax=ax)
Tiếp tục chỉnh style cho biểu đồ pandas đã vẽax = df.plot(x="month", y="sales") ax.set_title("Sales")
Đưa các cột thẳng vào Matplotlibax.plot(df["month"], df["sales"])

Matplotlib 3.11: cách viết cũ và cách viết hiện nay

Code sao chép từ các hướng dẫn cũ có thể lỗi hoặc hiện cảnh báo trong Matplotlib 3.11. Hãy viết theo cột Matplotlib 3.11.

Việc cần làmMatplotlib 3.11Cách viết cũ
Nhãn của box plotax.boxplot([data, data * 2], tick_labels=["A", "B"])labels=["A", "B"]
Box plot hoặc violin plot nằm ngangax.boxplot(data, orientation="horizontal")vert=False
Lấy một colormapplt.colormaps["viridis"]plt.cm.get_cmap("viridis")
Style seabornplt.style.use("seaborn-v0_8")plt.style.use("seaborn")

Những đoạn code Matplotlib bạn cần để biến dữ liệu thành một biểu đồ rõ ràng, chia theo từng việc: figure và axes, các loại biểu đồ, đường và màu sắc, tiêu đề và chú giải, trục và vạch chia, subplot và bố cục, style, và vẽ biểu đồ từ pandas. Mỗi dòng là một đoạn code ngắn bạn có thể dán vào, kèm một câu giải thích nó làm gì.

Mọi thứ ở đây dùng phong cách hướng đối tượng (fig, ax = plt.subplots(), rồi gọi phương thức trên ax) và viết cho Matplotlib 3.11, phiên bản Coddy đang chạy. Các cách viết cũ như labels= trong boxplot chỉ xuất hiện ở bảng cuối cùng, cạnh cách viết nên dùng thay thế. Các ví dụ dùng x = np.linspace(0, 10, 50), y = np.sin(x) và một mẫu giá trị phân phối chuẩn tên là data. Bạn mới bắt đầu với Python? Hãy xem cheat sheet Python trước, và mở các cheat sheet pandas, NumPy và scikit-learn bên cạnh trang này.

Câu hỏi thường gặp về cheat sheet Matplotlib

Cheat sheet Matplotlib này có miễn phí không?

Có. Cheat sheet Matplotlib này hoàn toàn miễn phí, không cần đăng ký. Lưu trang lại hoặc in ra PDF từ trình duyệt, rồi quay lại bất cứ khi nào bạn cần đúng lệnh cho chú giải, lưới subplot hay thanh màu.

plt và ax khác nhau thế nào?
plt.plot() vẽ lên axes hiện tại, rất nhanh khi chỉ có một biểu đồ. fig, ax = plt.subplots() cho bạn figure và axes ở dạng đối tượng, nên ax.plot() luôn vẽ đúng chỗ bạn muốn. Hãy dùng kiểu ax cho mọi thứ có nhiều hơn một biểu đồ, và cho code bạn sẽ giữ lại lâu dài.
Làm sao đổi kích thước figure?
Truyền figsize tính bằng inch khi tạo figure: fig, ax = plt.subplots(figsize=(10, 5)). Để đổi giá trị mặc định cho mọi figure, đặt plt.rcParams["figure.figsize"] = (10, 5). Kích thước pixel của tệp được lưu bằng figsize nhân với dpi.
Làm sao lưu biểu đồ với độ phân giải cao?
Gọi fig.savefig("chart.png", dpi=300, bbox_inches="tight"). dpi càng cao thì PNG càng sắc nét, còn bbox_inches="tight" cắt bỏ lề trống. Để in hoặc đưa vào slide, lưu dạng SVG hoặc PDF, sắc nét ở mọi kích thước.
Vì sao tiêu đề và nhãn của các subplot bị chồng lên nhau?
Tạo figure với layout="constrained", như plt.subplots(2, 2, layout="constrained"), và Matplotlib sẽ chừa chỗ cho tiêu đề, nhãn và thanh màu. Với một figure đã có, gọi fig.tight_layout() sau khi vẽ.
Cheat sheet này dành cho phiên bản Matplotlib nào?
Matplotlib 3.11, phiên bản Coddy đang chạy. Các lệnh đã bị xóa hoặc đổi tên ở phiên bản mới hơn, như labels= trong boxplot (nay là tick_labels=) và plt.cm.get_cmap (nay là plt.colormaps[...]), nằm ở bảng cuối cùng, cạnh cách viết nên dùng thay thế.
Có thể chạy code Matplotlib online không?
Có. Playground Matplotlib miễn phí chạy Python cùng Matplotlib, NumPy, pandas và scikit-learn ngay trên trình duyệt, vẽ figure cạnh phần đầu ra, nên bạn có thể dán bất kỳ đoạn code nào trong cheat sheet này và xem biểu đồ mà không cần cài đặt gì. Khóa học Machine Learning của Coddy dùng các biểu đồ này để khám phá dữ liệu trước khi huấn luyện mô hình.
Hình minh họa các ngôn ngữ lập trình của Coddy

Học Matplotlib cùng Coddy

Bắt đầu