Hướng dẫn dùng a+x python

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 plt bây giờ sẽ đại diện cho đối tượng matplotlib.pyplot đã được gọi vào bộ nhớ. OK, let’s start!

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 .figure() của plt

# 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

# 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()
1 trở thành một thể hiện của lớp figure. Lưu ý, sau khi khởi tạo, 
# 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()
1 chỉ là một reference đến một đối tượng thực sự trên RAM. Để xuất hiện cửa sổ figure, thông thường ta gọi lệnh 
# 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()
3 (Mình sẽ nói về bản chất của lệnh này ở phía sau). Ta sẽ được một cửa sổ trống tương tự như sau (tùy theo hệ điều hành):

Hướng dẫn dùng a+x python

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

# 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()
4, ví dụ:
# 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()
5. Tip: chữ
# 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()
6 phía trước đề khai báo chuỗi Unicode.

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

# 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()
7 gọi là axes. Danh sách này chứa các axes của figure đó. Mỗi axes là một đối tượng của lớp Axes (lớp này được định nghĩa trong module matplotlib.axes). Mỗi axes có thể chứa một hoặc nhiều hình vẽ (plots).

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ư:

  • fig.plot()
  • fig.get_xlabel()
  • fig.set_xticks()

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()

Hướng dẫn dùng a+x python

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 figure

Là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

# 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()
8, nhưng danh sách này là Read-only. Vì thế để lấy danh sách các axes và thay đổi chúng, ta phải dùng 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()
9 của
# 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()
0 (điều này không có gì lạ nếu bạn đã có kinh nghiệm với OOP).

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})

Hướng dẫn dùng a+x python

4. Một số thuộc tính khác của figure

Figure có một thuộc tính rất quan trọng đó là

# 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()
1.  Thuộc tính này quy định kích thước cửa sổ figure (theo đơn vị inch). Ví dụ:

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))

Hướng dẫn dùng a+x python
    
Hướng dẫn dùng a+x python

Tiếp theo là thuộc tính 

# 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()
2 và 
# 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()
3

  • # 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()
    2 quy định màu của khung viền bao quanh tất cả các axes trong figure đó
  • # 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()
    3 quy định độ dày của khung viền này
  • # 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()
    6 quy định màu nền của figure
  • Tip: Giá trị mặc định của chúng như sau: 
    # 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()
    7, 
    # 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()
    8, 
    # 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()
    9. Vì thế, nếu ta chỉ thay đổi màu 
    # 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()
    2 thì vẫn chưa thấy khung viền này, mà ta còn phải tăng giá trị 
    # 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()
    3 lên
  • for ax in fig3.get_axes():
        ax.set_alpha(0.5)
        ax.set_xticks([ ])
        ax.set_yticks([ ])
        ax.text(0,0,"TEXmath", {'fontsize':14})
    2 độ phân giải của hình (dots per inch). Giá trị mặc định là 100. 
    for ax in fig3.get_axes():
        ax.set_alpha(0.5)
        ax.set_xticks([ ])
        ax.set_yticks([ ])
        ax.text(0,0,"TEXmath", {'fontsize':14})
    2 càng cao thì chất lượng ảnh sẽ càng cao
5. Lưu figure đúng cách

Ta biết, để lưu một figure ta dùng method

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. Tuy nhiên có một số lưu ý khi sử dụng.

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()

Hướng dẫn dùng a+x python

Lưu ý: method

for ax in fig3.get_axes():
    ax.set_alpha(0.5)
    ax.set_xticks([ ])
    ax.set_yticks([ ])
    ax.text(0,0,"TEXmath", {'fontsize':14})
5 dùng để gọi đến axes đang ở trạng thái active trong figure. Nếu figure chưa có axes nào thì
for ax in fig3.get_axes():
    ax.set_alpha(0.5)
    ax.set_xticks([ ])
    ax.set_yticks([ ])
    ax.text(0,0,"TEXmath", {'fontsize':14})
5 sẽ tạo ra một axes mới, tương đương với
for ax in fig3.get_axes():
    ax.set_alpha(0.5)
    ax.set_xticks([ ])
    ax.set_yticks([ ])
    ax.text(0,0,"TEXmath", {'fontsize':14})
7

Bây giờ ta thử lưu figure trên bằng lệnh

for ax in fig3.get_axes():
    ax.set_alpha(0.5)
    ax.set_xticks([ ])
    ax.set_yticks([ ])
    ax.text(0,0,"TEXmath", {'fontsize':14})
8. Ta sẽ thu được một hình định dạng PNG sau đây trên ổ cứng

Hướng dẫn dùng a+x python

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

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 cũng có tham số
# 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()
6 (mặc định màu trắng) và tham số này đã over-ride (đè lên) 
# 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()
6 của figure.

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

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))
2, tương tự như sau:

fig.savefig('random points.png', facecolor=fig.get_facecolor())

Hướng dẫn dùng a+x python

Tương tự, các tham số

# 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()
2,
for ax in fig3.get_axes():
    ax.set_alpha(0.5)
    ax.set_xticks([ ])
    ax.set_yticks([ ])
    ax.text(0,0,"TEXmath", {'fontsize':14})
2 … cũng phải được khai báo trong lệnh
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))
5 để giữ đúng nguyên trạng của figure.

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

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))
5 ta cũng sẽ được như thế đó). Do đó, nếu bạn có rất nhiều figure, để căn chỉnh các figure này cho thống nhất, ta không nên căn chỉnh bằng tay. Mà phải căn chỉnh thông qua các tham số khi khởi tạo và khi lưu figure.

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

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))
7:

  • 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))
    8
  • 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))
    9
  • 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()
    0

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 

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))
9 sẽ gọi đến 
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()
2. Cách thứ 3 chỉ có tác dụng khi
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))
7 đang active