Hướng dẫn dùng plt.figsize python
Đôi khi chúng ta có thể vẽ được những hình đơn giản bằng lệnh “plt.plot“, nhưng không nắm rõ bản chất của các hình vẽ nên không thể “full control” những chi tiết của cửa sổ figure được. Bài viết này sẽ trình bày theo ngôn ngữ đối tượng về những điều cơ bản nhưng rất quan trọng liên quan đến figure của matplotlib. Show Bài viết không nhằm mục đích hướng dẫn các bạn vẽ hình. Bài viết chỉ trình bày sâu hơn về figure của thư viện Matplotlib. Để xem những khả năng vẽ hình của Matplotlib, mời bạn xem bài viết sau:
Trước hết, để thuận tiệp cho các ví dụ, ta import module pyplot của thư viện matplotlib với tên gọi tắt là plt và sử dụng xuyêt suốt các ví dụ import matplotlib.pyplot as plt Nhân tiện, chúng ta ôn lại một chút về Python cơ bản. Như đã nói trong bài viết Hiểu đúng về Name và Value trong Python, lệnh import cũng là một lệnh gán trong Python. Biến 1. Chính xác thì Figure là gì?Một figure như ta thường thấy là một đối tượng của lớp figure trong thư viện matplotlib. Lớp figure được định nghĩa trong module matplotlib.figure, lớp này chứa tất cả những thành phần của một hình vẽ (top level container for all plot elements). Tức là mọi thuộc tính, phương thức của hình vẽ đều được định nghĩa trong lớp này. Để khởi tạo một figure trống, ta chỉ đơn giản gọi phương thức # Khởi tạo figure trống fig1 = plt.figure() # Gọi phương thức show() của pyplot để hiện figure hiện tại plt.show() Khi đó, biến Như ta thấy, tên của cửa sổ là “Figure 1”. Tên này là do matplotlib tự động đặt
cho. Để đặt tên cho figure ngay lúc khởi tạo, ta chỉ cần đưa vào một chuỗi lúc gọi hàm Như vậy, về mặt trực quan thì figure là cái cửa sổ chứa tất cả những gì bạn sẽ vẽ trên đó. 2. Thành phần chính của một figure?Thành phần chính của một figure là các axes (những khung nhỏ hơn để vẽ hình lên đó). Một figure có thể chứa một hoặc nhiều axes . Nói cách khác, figure chỉ là khung chứa, chính các axes mới thật sự là nơi các hình vẽ được vẽ lên. Theo ngôn ngữ đối tượng thì: figure có một thuộc tính kiểu Như vậy, các phần tử như: đường vẽ (plots), các điểm chia (ticks), tên của các trục tọa độ (xlabel, ylabel),… đều là con của axes chứ không phải là của figure. Vì thế, sẽ không có những methods gọi từ figure kiểu như:
Sau đây là ví dụ của một figure có nhiều axes chồng chéo nhau # Khởi tạo một figure trống fig3 = plt.figure(u'Các axes chồng chéo nhau trong một figure') # Thêm axes bằng lệnh add_subplot fig3.add_subplot(1,1,1, facecolor='white') # Thêm axes bằng lệnh add_axes fig3.add_axes([0.1, 0.4, 0.4, 0.3], facecolor=(0,0,1)) fig3.add_axes([0.6, 0.2, 0.4, 0.3], facecolor='#ff0000') # Thêm tiếp một axes bằng lệnh add_subplot # Viết tắt của fig3.add_subplot(1,3,2) fig3.add_subplot(132, facecolor=(0,0,0,0.5)) # Hiện hình vẽ lên fig3.show() Tất nhiên, trong thực tế không ai bố trí các axes một cách xấu xí như vậy. Ví dụ trên chỉ cho thấy: một figure có thể có bao nhiêu axes tùy thích, có thể thêm-xóa-sửa các axes bất kỳ lúc nào vì chúng là các đối tượng độc lập (chúng ta để ý thấy trong mỗi axes, các trục tọa độ luôn là từ 0 đến 1). 3. Quản lí các axes trong figureLàm thế nào để truy cập và sửa (thay đổi màu, thay đổi vị trí,…) các axes đã thêm vào figure? Để dễ hình dung, chúng ta tiếp tục ví dụ phía trên. Như đã nói, tất cả các axes của figure đều được liệt kê trong Giả sử bây giờ ta muốn bỏ hết các điểm chia tọa độ đi, thêm vào mỗi axes dòng chữ “TEXmath” ở góc dưới bên trái. Chỉ cần dùng vòng lặp for như sau: for ax in fig3.get_axes(): ax.set_alpha(0.5) ax.set_xticks([ ]) ax.set_yticks([ ]) ax.text(0,0,"TEXmath", {'fontsize':14}) 4. Một số thuộc tính khác của figureFigure có một thuộc tính rất quan trọng đó là fig4 = plt.figure(u'Figure kích thước 6x4 inches',figsize=(6,4)) fig5 = plt.figure(u'Figure kích thước 4x3 inches',figsize=(4,3)) Tiếp theo là thuộc tính
Ta biết, để lưu một figure ta dùng method Giả sử ta vẽ hình sau đây trên một figure có nền màu xám như sau import numpy as np # Khởi tạo hai mảng ngẫu nhiên X và Y N = 100 X = np.random.rand(n) Y = np.random.rand(n) # Diện tích sẽ tăng dần theo trục Y area = 100 * Y**2 * np.pi # Màu sắc sẽ thay đổi theo trục X colors = X # Khởi tạo một figure trống có nền xám fig = plt.figure(u'Vẽ các điểm ngẫu nhiên bằng lệnh scatter', facecolor='#00000050') # Gọi phương thức gca() (get curent axes) của fig # Sau đó vẽ lên axes nhận được fig.gca().scatter(X, Y, s=area, c=colors, cmap=plt.cm.jet, edgecolor='k') fig.show() Lưu ý: method Bây giờ ta thử lưu figure trên bằng lệnh Như bạn thấy, nền xám của figure đã bị biến thành màu trắng. Nguyên nhân là method Vì thế, để lưu được figure đúng như ta nhìn thấy trên cửa sổ figure ta phải lấy facecolor của figure bằng phương thức fig.savefig('random points.png', facecolor=fig.get_facecolor()) Tương tự, các tham số fig.savefig('random points.png', facecolor=fig.get_facecolor(), edgecolor=fig.get_edgecolor(), dpi = fig.get_dpi()) Tips: Sau khi show hình lên, nếu ta zoom hình, co dãn cửa sổ, di chuyển hình vẽ (bằng công cụ move),… thì những tác động này cũng trực tiếp
làm thay đổi figure (tức là ta thấy figure thế nào thì sau khi 6. Làm thế nào để xóa nội dung một figure?Xóa nội dung của một figure tức là xóa đi các axes và hình vẽ gắn liền với các axes đó. Việc này là cần thiết trong một số trường hợp, thay vì phải khởi tạo ra figure mới để vẽ lên. Có 3 cách để xóa nội dung của một figure. Giả sử ta cần xóa nội dung của
Cách thứ nhất và thứ hai là hoàn toàn giống nhau, vì thực chất phương thức 7. Kết luậnNhư vậy, bài viết giúp bạn ôn lại một số điểm quan trọng sau
8. Tài liệu tham khảo
TEXmath NỘI DUNG CHÍNH
|