Hướng dẫn dùng subplots python python
Chúng ta đã đưa ra rất nhiều ví dụ để vẽ đồ thị trong các chương trước của hướng dẫn Python trên Matplotlib. Một câu hỏi thường gặp là làm thế nào để có nhiều plots trong một đồ thị? Trong trường hợp đơn giản nhất điều này có thể có nghĩa là, bạn có một đường cong và bạn muốn một đường cong in qua nó. Đây không phải là một vấn đề, bởi vì nó sẽ đủ để đưa haiplots trong kịch bản của bạn, như chúng ta đã thấy trước đây. Trường hợp thú vị hơn là, nếu bạn muốn hai plots trong một cửa sổ. Trong một cửa sổ có nghĩa là chúng phải ở hai vị trí con riêng lẻ, nghĩa là không được in trên nhau. Ý tưởng là có nhiều hơn một đồ thị trong một cửa sổ và mỗi đồ thị xuất hiện trong subplot riêng của mình. Chúng tôi sẽ trình bày hai cách khác nhau để hoàn thành mục tiêu này: subplot Chúng tôi nghĩ rằng gridspec là lựa chọn tốt nhất vì nó dễ sử dụng hơn rất nhiều, nếu bố cục phức tạp hơn! Subplot: Làm việc với nhiều figures và axes
Nếu một subplot được áp dụng cho một con số, con số này sẽ được chia thành các trục con 'nrows' * 'ncols'. Tham số 'plot_number' xác định subplot mà hàm phải tạo ra. 'plot_number' có thể dao động từ 1 đến tối đa là 'nrows' * 'ncols'. Nếu các giá trị của ba tham số nhỏ hơn 10, thì hàm subplot có thể được gọi với một tham số int, trong đó hàng trăm đại diện cho 'nrows', hàng chục đại diện cho 'ncols' vàhàng đơn vị biểu diễn 'plot_number'. Điều này có nghĩa là: Thay vì subplot (2, 3, 4) chúng ta có thể viết subplot (234). Ví dụ sau đây tạo ra hai subplot của lưới 2x2
Mặc dù cách tiếp cận trước đó có thể chấp nhận được, nhưng theo tiếp cận hướng đối tượng bằng cách sử dụng các thể hiện của lớp figure. Chúng tôi chứng minh điều này bằng cách viết lại ví dụ trước. Trong trường hợp này, chúng ta phải sử dụng phương thức "add_subplot" cho đối tượng figure.
Để loại bỏ, hay tùy biến ticks trong các subplot, với cách tiếp cận đầu tiên ta có thể sử dụng phương thức xticks,yticks() của lớp pyplot, tuy nhiên cách sử dụng OOP ở ví dụ thứ hai ta cần sử dụng phương thức set_xticks(), và set_yticks() của lớp Axes trả về từ phương thức add_subplot(). Các bạn tự thực hành phần này nhé. Các bạn đoán thử xem làm thế nào tôi có thể tạo được một figure với cách bố trí các subplots như sau: (các bạn chú ý phần màu tôi đã trình bầy trong lời giải sẽ giúp các bạn hiểu về cách chia blocks) Bài 1:
Lời giải tham khảo:
Bài 2: Lời giải tham khảo:
Bài 3: Lời giải tham khảo:
Dùng gridspec để vẽ subplots. 'Matplotlib.gridspec' chứa một lớp GridSpec. Nó có thể được sử dụng như là một thay thế cho subplot để xác định hình học của subplots được tạo ra. Ý tưởng cơ bản đằng sau GridSpec là một 'lưới'. Một lưới được thiết lập với số hàng và cột. Chúng ta phải xác định sau này, bao nhiêu lưới mà một subplot nên phủ. Ví dụ sau cho thấy trường hợp nhỏ hoặc đơn giản nhất, tức là lưới 1x1
Chúng ta có thể sử dụng một số thông số của Gridspec, ví dụ: Chúng ta có thể xác định rằng biểu đồ của chúng ta sẽ bắt đầu ở mức 20% từ đáy và 15% ở phía bên trái của vùng hình có sẵn:
Ví dụ tiếp theo cho thấy một thiết kế lưới phức tạp hơn:
Bài tập hãy tạo ra một figure có các subplot theo hình sau: Lời giải:
Bạn nhận thấy lời giải khi sử dụng gridspec dễ hiểu hơn đúng không! Vẽ một plot bên trong một plot khác. Ta dùng Thêm một trục tại vị trí rect [trái, dưới, chiều rộng, chiều cao] nơi mà tất cả các số lượng nằm trong các phân số của chiều rộng và chiều cao.
Có thể định cấu hình các dãy của các trục. Điều này có thể được thực hiện bằng cách sử dụng phương thức set_ylim() và set_xlim() trong đối Axis.
Kết Luận Qua bài học bạn có thể chia hình vẽ thành nhiều cửa sổ con theo một layout mà bạn muốn qua hai cách subplot và gridspec, theo cảm nhận riêng của cá nhân thì gridspec giúp việc này dễ dàng hơn đặc biệt với trường hợp có layout phức tạp. Trên mỗi một cửa sổ (subplot) bạn có thể tương tác qua đối tượng Axis được trả về khi sử dụng subplot và Gridspec. |