TÓM TẮT
- 1 Mở Đầu
- 2 1. Tổng Quan Về Các Thư Viện Vẽ Hình Trong Python
- 3 2. Cài Đặt Các Thư Viện Cần Thiết
- 4 3. Vẽ Hình Cơ Bản Với Matplotlib
- 5 4. Vẽ Hình Với Pillow (PIL)
- 6 5. Vẽ Hình Với Turtle (Dành Cho Người Mới Bắt Đầu)
- 7 6. Vẽ Đồ Họa 2D Với Pygame
- 8 7. Kỹ Thuật Nâng Cao
- 9 8. Thực Hành: Dự Án Mini – Vẽ Bản Đồ Đường Đi
- 10 9. Lời Khuyên Khi Vẽ Hình Trong Python
- 11 10. Kết Luận
Mở Đầu
Trong thời đại hiện nay, Python đã trở thành một trong những ngôn ngữ lập trình phổ biến nhất không chỉ trong lĩnh vực phát triển web, trí tuệ nhân tạo mà còn trong việc tạo ra các đồ họa, hình ảnh và trực quan hoá dữ liệu. Khả năng vẽ hình trong Python không chỉ hữu ích cho các nhà khoa học dữ liệu mà còn cho những ai muốn tạo ra các ứng dụng đồ họa, trò chơi, hoặc thậm chí là thiết kế giao diện người dùng. Bài viết này sẽ cung cấp cho bạn một hướng dẫn chi tiết, từ những kiến thức cơ bản nhất cho đến các kỹ thuật nâng cao, giúp bạn tự tin vẽ mọi loại hình trong Python.
1. Tổng Quan Về Các Thư Viện Vẽ Hình Trong Python
Python có một hệ sinh thái phong phú với nhiều thư viện hỗ trợ vẽ hình. Dưới đây là một số thư viện phổ biến nhất:
| Thư viện | Mô tả | Ứng dụng chính |
|---|---|---|
| Matplotlib | Thư viện vẽ đồ thị 2D mạnh mẽ, hỗ trợ nhiều loại biểu đồ. | Vẽ biểu đồ, đồ thị thống kê, hình học cơ bản. |
| Seaborn | Xây dựng trên Matplotlib, cung cấp giao diện dễ dùng và đẹp mắt. | Trực quan hoá dữ liệu thống kê. |
| Pillow (PIL) | Thư viện xử lý ảnh, hỗ trợ vẽ hình cơ bản trên bitmap. | Chỉnh sửa ảnh, tạo ảnh động, vẽ hình đơn giản. |
| Turtle | Thư viện giáo dục, mô phỏng con rùa vẽ đường. | Học lập trình, vẽ hình học cơ bản. |
| Plotly | Vẽ đồ thị tương tác (interactive) trên web. | Đồ thị tương tác, visualisation trên trình duyệt. |
| Bokeh | Tương tự Plotly, tập trung vào đồ thị tương tác lớn. | Dashboard, visualisation dữ liệu lớn. |
| PyCairo | Giao diện Python cho thư viện vẽ 2D Cairo. | Vẽ vector, tạo PDF, SVG. |
| PyOpenGL | Giao diện Python cho OpenGL, vẽ 3D. | Game, mô phỏng 3D. |
| Pygame | Thư viện game, cung cấp các hàm vẽ 2D. | Phát triển game, mô phỏng. |
| Manim | Thư viện tạo video toán học (được sử dụng bởi 3Blue1Brown). | Tạo video giảng dạy, hoạt ảnh toán học. |
Trong phần tiếp theo, chúng ta sẽ tập trung vào Matplotlib, Pillow, Turtle, và Pygame vì chúng dễ tiếp cận và đáp ứng hầu hết nhu cầu vẽ hình của người dùng mới bắt đầu.
2. Cài Đặt Các Thư Viện Cần Thiết
Trước khi bắt đầu, hãy chắc chắn rằng bạn đã cài đặt Python (phiên bản 3.7 trở lên) và các thư viện sau:
pip install matplotlib pillow pygame seaborn
Nếu bạn muốn khám phá thêm các thư viện nâng cao, có thể cài đặt:
pip install plotly bokeh pycairo manim
3. Vẽ Hình Cơ Bản Với Matplotlib

Có thể bạn quan tâm: Cách Vẽ Hình Trong Powerpoint: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
3.1. Khởi Tạo Đồ Thị
Matplotlib thường được sử dụng dưới dạng pyplot. Dưới đây là ví dụ vẽ một đường thẳng:
import matplotlib.pyplot as plt x = 0, 1, 2, 3, 4
y = 0, 2, 4, 6, 8 plt.plot(x, y, color='blue', linewidth=2, marker='o')
plt.title('Đồ thị Đường Thẳng')
plt.xlabel('Trục X')
plt.ylabel('Trục Y')
plt.grid(True)
plt.show()
3.2. Vẽ Các Hình Học Cơ Bản
Matplotlib cung cấp patches để vẽ các hình dạng như hình tròn, hình chữ nhật, đa giác…
import matplotlib.pyplot as plt
import matplotlib.patches as patches fig, ax = plt.subplots() # Vẽ hình tròn
circle = patches.Circle((0.5, 0.5), radius=0.2, edgecolor='red', facecolor='none', linewidth=2)
ax.add_patch(circle) # Vẽ hình chữ nhật
rect = patches.Rectangle((0.1, 0.1), width=0.3, height=0.2, edgecolor='green', facecolor='yellow')
ax.add_patch(rect) # Vẽ đa giác (tam giác)
triangle = patches.Polygon(0.7, 0.2, 0.9, 0.2, 0.8, 0.4, closed=True, edgecolor='purple', facecolor='pink')
ax.add_patch(triangle) ax.set_aspect('equal')
plt.xlim(0, 1)
plt.ylim(0, 1)
plt.title('Vẽ Các Hình Học Cơ Bản với Matplotlib')
plt.show()
3.3. Tùy Chỉnh Đồ Thị
Bạn có thể thay đổi màu, độ dày, kiểu đường viền, thêm chú thích, legend…
plt.plot(x, y, 'r--', label='Dòng 1') # Đường đỏ gạch ngang
plt.plot(x, i2 for i in x, 'b-.', label='Dòng 2') # Đường xanh chấm gạch
plt.legend(loc='upper left')
3.4. Lưu Đồ Thị Ra File
plt.savefig('my_plot.png', dpi=300, bbox_inches='tight')
4. Vẽ Hình Với Pillow (PIL)
Pillow là thư viện xử lý ảnh mạnh mẽ, cho phép bạn tạo, chỉnh sửa và vẽ trên các đối tượng ảnh.
4.1. Tạo Ảnh Mới
from PIL import Image, ImageDraw # Tạo ảnh trắng 400x400
img = Image.new('RGB', (400, 400), color='white')
draw = ImageDraw.Draw(img)
4.2. Vẽ Các Hình Cơ Bản

Có thể bạn quan tâm: Cách Vẽ Hình Trong Photoshop: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
# Vẽ đường thẳng
draw.line((50, 50, 350, 50), fill='black', width=5) # Vẽ hình chữ nhật
draw.rectangle((50, 100, 350, 200), outline='blue', width=3, fill='lightblue') # Vẽ hình tròn (ellipse)
draw.ellipse((150, 250, 250, 350), outline='red', width=4, fill='pink')
4.3. Vẽ Văn Bản
from PIL import ImageFont font = ImageFont.truetype('arial.ttf', 24)
draw.text((120, 20), "Hello Pillow!", fill='darkgreen', font=font)
4.4. Lưu Ảnh
img.save('drawing.png')
4.5. Kết Hợp Với NumPy
Bạn có thể chuyển đổi ảnh sang mảng NumPy để xử lý nâng cao:
import numpy as np arr = np.array(img)
# Thực hiện các thao tác trên mảng...
5. Vẽ Hình Với Turtle (Dành Cho Người Mới Bắt Đầu)
Turtle là thư viện giáo dục, mô phỏng một con rùa di chuyển và vẽ.
5.1. Khởi Động Turtle
import turtle t = turtle.Turtle()
t.speed(2) # Tốc độ vẽ (1-10)
5.2. Vẽ Hình Vuông
for _ in range(4): t.forward(100) # Di chuyển 100 pixel t.right(90) # Quay phải 90 độ
5.3. Vẽ Tam Giác Đều
for _ in range(3): t.forward(150) t.left(120)
5.4. Vẽ Hình Ngôi Sao

Có thể bạn quan tâm: Cách Vẽ Hình Trong Paint: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
t.color('red')
t.begin_fill()
for _ in range(5): t.forward(150) t.right(144)
t.end_fill()
5.5. Thêm Văn Bản
t.penup()
t.goto(-50, -50)
t.pendown()
t.write("Hello Turtle!", font=("Arial", 16, "bold"))
5.6. Kết Thúc
turtle.done()
6. Vẽ Đồ Họa 2D Với Pygame
Pygame là thư viện tạo game, cung cấp các hàm vẽ hình nhanh và xử lý sự kiện.
6.1. Thiết Lập Cửa Sổ
import pygame
import sys pygame.init()
size = (800, 600)
screen = pygame.display.set_mode(size)
pygame.display.set_caption('Vẽ Hình với Pygame')
clock = pygame.time.Clock()
6.2. Vòng Lặp Chính và Xử Lý Sự Kiện
running = True
while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False screen.fill((255, 255, 255)) # Nền trắng # Vẽ các hình ở đây pygame.display.flip() clock.tick(60) pygame.quit()
sys.exit()
6.3. Vẽ Các Hình Cơ Bản
# Vẽ đường thẳng
pygame.draw.line(screen, (0, 0, 0), (100, 100), (700, 100), 5) # Vẽ hình chữ nhật
pygame.draw.rect(screen, (0, 128, 255), pygame.Rect(150, 150, 200, 100), 2) # viền
pygame.draw.rect(screen, (0, 255, 0), pygame.Rect(400, 150, 200, 100)) # đầy màu # Vẽ hình tròn
pygame.draw.circle(screen, (255, 0, 0), (400, 400), 50, 0) # đầy màu
pygame.draw.circle(screen, (0, 0, 0), (400, 400), 80, 3) # viền # Vẽ đa giác (tam giác)
points = (600, 300), (700, 500), (500, 500)
pygame.draw.polygon(screen, (128, 0, 128), points, 0)
6.4. Vẽ Văn Bản

Có thể bạn quan tâm: Cách Vẽ Hình Trong Latex: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
font = pygame.font.SysFont('Arial', 28)
text_surface = font.render('Hello Pygame!', True, (0, 0, 0))
screen.blit(text_surface, (300, 50))
7. Kỹ Thuật Nâng Cao
7.1. Vẽ Đồ Thị Tương Tác Với Plotly
Plotly cho phép tạo biểu đồ tương tác, có thể zoom, hover để xem giá trị.
import plotly.graph_objects as go fig = go.Figure(data=go.Scatter(x=1,2,3,4, y=10,15,13,17, mode='lines+markers', line=dict(color='firebrick', width=2), marker=dict(size=10, color='orange'))) fig.update_layout(title='Đồ Thị Tương Tác với Plotly', xaxis_title='X Axis', yaxis_title='Y Axis')
fig.show()
7.2. Tạo Đồ Thị 3D Với Matplotlib
from mpl_toolkits.mplot3d import Axes3D
import numpy as np fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
Z = np.sin(np.sqrt(X2 + Y2)) ax.plot_surface(X, Y, Z, cmap='viridis')
ax.set_title('Bề mặt 3D')
plt.show()
7.3. Vẽ Vector với PyCairo
import cairo WIDTH, HEIGHT = 400, 400
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, WIDTH, HEIGHT)
ctx = cairo.Context(surface) # Nền trắng
ctx.set_source_rgb(1, 1, 1)
ctx.paint() # Vẽ đường thẳng
ctx.set_source_rgb(0, 0, 0)
ctx.set_line_width(5)
ctx.move_to(50, 50)
ctx.line_to(350, 50)
ctx.stroke() # Vẽ hình tròn
ctx.arc(200, 200, 80, 0, 2 3.14159)
ctx.set_source_rgb(0.2, 0.6, 0.8)
ctx.fill_preserve()
ctx.set_source_rgb(0, 0, 0)
ctx.stroke() surface.write_to_png("cairo_output.png")
7.4. Tạo Hoạt Ảnh Toán Học Với Manim
Manim là công cụ mạnh mẽ để tạo video giảng dạy.
from manim import class SquareToCircle(Scene): def construct(self): square = Square() self.play(Create(square)) self.play(Transform(square, Circle())) self.play(FadeOut(square))
Lưu file trên dưới dạng square_to_circle.py và chạy:
manim -pql square_to_circle.py SquareToCircle
Bạn sẽ nhận được video ngắn chuyển đổi hình vuông thành hình tròn.
8. Thực Hành: Dự Án Mini – Vẽ Bản Đồ Đường Đi
8.1. Mô Tả Dự Án
Ta sẽ tạo một ứng dụng nhỏ dùng Pygame để vẽ bản đồ đường đi của một robot di chuyển trong một lưới 2D. Người dùng có thể nhấn phím mũi tên để di chuyển robot, và đường đi sẽ được vẽ liên tục.

8.2. Mã Nguồn
import pygame, sys # ---- Cài đặt ----
pygame.init()
WIDTH, HEIGHT = 600, 600
GRID_SIZE = 20
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('Robot Path Drawing')
clock = pygame.time.Clock() # Màu
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
BLUE = (0, 0, 255) # Vị trí robot
x, y = WIDTH // 2, HEIGHT // 2
path = (x, y) def draw_grid(): for i in range(0, WIDTH, GRID_SIZE): pygame.draw.line(screen, (200,200,200), (i,0), (i,HEIGHT)) for j in range(0, HEIGHT, GRID_SIZE): pygame.draw.line(screen, (200,200,200), (0,j), (WIDTH,j)) def draw_path(): if len(path) > 1: pygame.draw.lines(screen, RED, False, path, 3) def draw_robot(): pygame.draw.circle(screen, BLUE, (x, y), GRID_SIZE//2) # ---- Vòng Lặp Chính ----
running = True
while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False keys = pygame.key.get_pressed() moved = False if keyspygame.K_LEFT: x -= GRID_SIZE moved = True if keyspygame.K_RIGHT: x += GRID_SIZE moved = True if keyspygame.K_UP: y -= GRID_SIZE moved = True if keyspygame.K_DOWN: y += GRID_SIZE moved = True if moved: path.append((x, y)) screen.fill(WHITE) draw_grid() draw_path() draw_robot() pygame.display.flip() clock.tick(10) pygame.quit()
sys.exit()
8.3. Giải Thích
- Grid: Vẽ lưới để người dùng dễ nhìn vị trí.
- Path: Dùng danh sách
pathlưu các tọa độ đã đi. - Robot: Vẽ một vòng tròn màu xanh đại diện cho robot.
- Movement: Khi nhấn phím mũi tên, robot di chuyển một bước và điểm mới được thêm vào
path.pygame.draw.linesvẽ các đoạn nối các điểm.
8.4. Mở Rộng
- Thêm chướng ngại vật (hình chữ nhật) và kiểm tra va chạm.
- Thêm nút “Reset” để xóa đường đi.
- Lưu đường đi vào file CSV để phân tích sau.
9. Lời Khuyên Khi Vẽ Hình Trong Python
- Chọn Thư Viện Phù Hợp: Đối với đồ thị thống kê, dùng Matplotlib/Seaborn. Đối với hình ảnh bitmap, Pillow. Đối với game hoặc tương tác thời gian thực, Pygame. Đối với hoạt ảnh và video, Manim hoặc Plotly.
- Quản Lý Kích Thước: Đối với ảnh lớn, hãy cân nhắc sử dụng
numpyđể xử lý nhanh hơn. - Sử Dụng Vector Khi Có Thể: Định dạng SVG, PDF (có thể tạo bằng Cairo) cho phép phóng to không mất chất lượng.
- Tối Ưu Hóa Vòng Lặp Vẽ: Khi vẽ trong thời gian thực (Pygame), tránh gọi các hàm nặng trong vòng lặp; vẽ lại chỉ những phần cần thiết.
- Lưu Trữ Định Dạng Phù Hợp: PNG cho bitmap, SVG cho vector, MP4 cho video.
10. Kết Luận
Việc vẽ hình trong Python không chỉ là một kỹ năng “đẹp mắt” mà còn là công cụ quan trọng giúp truyền tải thông tin, trực quan hoá dữ liệu và tạo ra các ứng dụng tương tác. Từ những thư viện cơ bản như Matplotlib và Pillow đến những công cụ mạnh mẽ như Plotly, Manim và PyOpenGL, Python cung cấp một môi trường đa dạng để bạn thỏa sức sáng tạo.
Hy vọng qua bài viết này, bạn đã nắm được:
- Cách cài đặt và sử dụng các thư viện vẽ hình phổ biến.
- Các ví dụ thực tế, từ vẽ hình học cơ bản đến tạo đồ thị tương tác.
- Kỹ thuật nâng cao và một dự án mini để thực hành.
Hãy tiếp tục khám phá, thực hành và kết hợp các thư viện để tạo ra những sản phẩm đồ họa độc đáo của riêng bạn. Chúc bạn thành công!
