Vẽ đồ thị với seaborn bằng giao diện hướng đối tượng matplotlib


103

Tôi thực sự thích sử dụng matplotlibtheo phong cách OOP:

f, axarr = plt.subplots(2, sharex=True)
axarr[0].plot(...)
axarr[1].plot(...)

Điều này giúp bạn dễ dàng theo dõi nhiều số liệu và ô phụ.

Câu hỏi: Làm thế nào để sử dụng seaborn theo cách này? Hoặc, làm thế nào để thay đổi ví dụ này thành kiểu OOP? Làm thế nào để cho biết các seabornchức năng âm mưu như lmplotcái nào Figurehoặc Axesnó âm mưu?


1
Liên quan: Vấn đề nàycâu trả lời này cho một giải pháp khả thi, sẽ cho phép tạo ra một hình sơ sinh và di chuyển tất cả các trục đến một lưới ô con sau này.
Tầm quan

Câu trả lời:


228

Nó phụ thuộc một chút vào chức năng seaborn bạn đang sử dụng.

Các chức năng lập biểu đồ trong seaborn được chia rộng rãi thành hai lớp

  • Chức năng "Axes cấp", bao gồm regplot, boxplot, kdeplot, và nhiều người khác
  • "Hình cấp" chức năng, bao gồm lmplot, factorplot, jointplotvà một hoặc hai người khác

Nhóm đầu tiên được xác định bằng cách lấy một axđối số rõ ràng và trả về một Axesđối tượng. Như điều này gợi ý, bạn có thể sử dụng chúng theo kiểu "hướng đối tượng" bằng cách chuyển của bạn Axescho chúng:

f, (ax1, ax2) = plt.subplots(2)
sns.regplot(x, y, ax=ax1)
sns.kdeplot(x, ax=ax2)

Các hàm cấp Axes sẽ chỉ vẽ vào một Axesvà sẽ không gây rối với hình, vì vậy chúng có thể cùng tồn tại một cách hoàn hảo vui vẻ trong một tập lệnh matplotlib hướng đối tượng.

Nhóm chức năng thứ hai (ở mức Hình) được phân biệt bởi thực tế là biểu đồ kết quả có thể bao gồm một số Trục luôn được tổ chức theo cách "có ý nghĩa". Điều đó có nghĩa là các chức năng cần phải có toàn quyền kiểm soát đối với hình vẽ, vì vậy không thể vẽ đồ thị, ví dụ, một lmplotcái đã tồn tại. Việc gọi hàm luôn khởi tạo một hình và thiết lập nó cho biểu đồ cụ thể mà nó đang vẽ.

Tuy nhiên, khi bạn đã gọi lmplot, nó sẽ trả về một đối tượng cùng loại FacetGrid. Đối tượng này có một số phương pháp để vận hành trên âm mưu kết quả biết một chút về cấu trúc của lô. Nó cũng hiển thị hình cơ bản và mảng các trục tại đối số FacetGrid.figFacetGrid.axes. Các jointplotchức năng là rất giống nhau, nhưng nó sử dụng một JointGridđối tượng. Vì vậy, bạn vẫn có thể sử dụng các hàm này trong ngữ cảnh hướng đối tượng, nhưng tất cả các tùy chỉnh của bạn phải đến sau khi bạn gọi hàm.


Điều này thực sự hữu ích. Hãy nhìn vào câu trả lời của tôi ở đây: stackoverflow.com/questions/27019079/...
Denson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.