Hướng dẫn vẽ hình bằng python
Thật vậy, mỗi khi chúng ta thực hiện một thuật toán, nếu các bước trong thuật toán có thể tạo thành một hình ảnh, đặc biệt là hình ảnh động nó giúp chúng ta hiểu thuật toán đó nhanh chóng. Bài viết này hướng dẫn các bạn thực hiện vẽ các đồ thị, biểu đồ dạng hình ảnh động có thể lưu thành file ảnh động gif hoặc dưới dạng video mp4 khi sử dụng thư viện Matplotlib trong Python. Ví dụ ảnh động dưới đây là đồ thị động của một sóng hình sin có phương trình dạng $y=\sin{2\pi (x-c)}$ Show 1. Các bước vẽ đồ thị động trong PythonBài viết có nhiều kiến thức cơ bản liên quan đến thư viện Matplotlib, nếu bạn chưa biết nhiều về thư viện này, tham khảo bài viết Vẽ đồ thị, biểu đồ với thư viện Matplotlib. Ảnh động, video hay hoạt hình bản chất là việc hiển thị các ảnh tĩnh, mỗi ảnh có nội dung khác nhau được hiển thị trong một khoảng thời gian nhất định. Nguyên lý này cũng được áp dụng khi vẽ đồ thị động trong Matplotlib, nó vẽ ra màn hình đồ thị tại các thời điểm, lưu tạm thành các frame và cuối cùng là lưu thành chuỗi các frame dưới dạng ảnh động GIF hoặc video MP4. Tiếp theo chúng ta sẽ tìm hiểu các bước thực hiện: Bước 1: Import những thư viện cần thiết:
Trong phần này chúng ta import hai thư viện rất phổ biến của Python là Numpy và Matplotlib, một thư viện chuyên xử lý về mảng và một thư viện chuyên vẽ đồ thị biểu đồ từ dữ liệu. Câu lệnh %matplotlib inline để hiển thị các đồ thị ngay trong cell của Jupyter Notebook. Tham khảo Hướng dẫn sử dụng Jupyter Notebook công cụ không thể thiếu khi học Python. Bước 2: Thiết lập trục tọa độ của đồ thị
Như đã tìm hiểu trong bài Vẽ đồ thị cơ bản với Matplotlib, các đối tượng trong Matplotlib được phân cấp theo hình cây. Với câu lệnh đầu tiên, chúng ta có biến fig chứa đối tượng Figure là một khung chứa, ảnh (container) chứa đựng toàn bộ các nội dung đồ thị, biểu đồ trong đó. Tiếp đó, biến ax chứa nhiều các đối tượng Axes, đối tượng chứa trục tọa độ và đồ thị thị, ở đây chúng ta sẽ tạo ra một trục tọa độ có trục x trong dải [0,4] trục y trong dải [-2,2] và line là một đối tượng đồ thị là một đường nối các chuỗi điểm liên tiếp. Bước 3: Tạo function vẽ đồ thị cho từng tập dữ liệu được gọi đến khi tạo frame.
Function này sẽ được gọi đến khi tạo ra các frame trong ảnh động hoặc video. Cấu trúc function sẽ được mô tả trong bước 4. Chúng ta xem nội dung function này, chúng ta sẽ vẽ lên đồ thị hàm số $y=\sin{2\pi (x-c)}$ với dữ liệu $x$ được tạo ra bởi thư viện Numpy là một mảng gồm 1000 phần tử cách đều nhau trong dải [0,4]. Bước 4: Gọi FuncAnimation, save ra file hoặc hiển thị
Hàm FuncAnimation tạo ra các hình ảnh động bằng cách gọi lặp đi lặp lại các hàm vẽ hoạt cảnh ở bước 3. Hàm này có một số các tham số như sau:
anim.save('sine_wave.gif', writer='imagemagick'), câu lệnh này lưu toàn bộ các frame thành một ảnh động dạng GIF. Chú ý, bạn cần cài đặt ImageMagick nếu không sẽ có một cảnh báo về việc không tìm thấy imagemagick và chuyển sang một thư viện khác. 2. Hiển thị ảnh động hoặc video trong Jupyter NotebookMặc định Jupyter Notebook không hiển thị được video hoặc ảnh động, do vậy muốn hiển thị được luôn trên Jupyter Notebook chúng ta cần sử dụng một số cách sau: Cách 1: Chuyển đổi ảnh động thành video và gọi chức năng hiển thị video trong HTML5 để hiển thị.
Cách 2: Dùng cú pháp Markdown để hiển thị ảnh động GIF.
Chúng ta đã có một ảnh sin_wave.gif được tạo ra cùng thư mục với thư mục chứa file Jupyter notebook hiện tại, do đó chỉ cần tạo một cell mới trong Jupyter Notebook, chuyển về dạng Markdown và thực hiện code hiển thị một ảnh như sau:
3. Một số ví dụ về tạo ảnh động cho đồ thị trong MatplotlibBạn có thể tham khảo rất nhiều ví dụ thực hiện với Animation trong Matplotlib, các ví dụ này sẽ giúp bạn thành thạo hơn về Matplotlib và đặc biệt là thực hiện các ảnh động giúp minh họa cho các thuật toán một cách hiệu quả hơn. 3.1 Ví dụ 1:Vẽ một tập hợp điểm ngẫu nhiên trong một dải giữa hai đường song song và vẽ một đường thẳng động chạy giữa hai đường này.
Kết quả như ảnh động sau: 3.2 Ví dụ 2: Vẽ đường xoắn ốcThực hiện vẽ một đường xoắn ốc, trong toán học đường xoắn ốc có phương trình hệ tọa độ cực là $r=ae^{\theta \cot{b}}$. Để thực hiện vẽ đường xoắn này, chúng ta thực hiện chuyển đổi về dạng tham số như sau $$x(t)=ae^{bt}\cos{t}$$ $$y(t)=ae^{bt}\sin{t}$$ Code Python như sau:
Kết quả như sau: 3.3 Ví dụ mô phỏng con lắc đôiĐây là một ví dụ tương đối phức tạp về tính toán quỹ đạo con lắc đôi, là một ví dụ hay về mô phỏng nếu bạn có thể tìm hiểu kỹ, nó sẽ giúp bạn có thêm nhiều kiến thức lập trình Python. |