Mục đích của %% matplotlib nội tuyến


483

Ai đó có thể giải thích cho tôi chính xác việc sử dụng là %matplotlib inlinegì?


22
Đây là một chức năng ma thuật biểu hiện hình trong sổ ghi chép (thay vì hiển thị kết xuất của đối tượng hình). Một hướng dẫn Matplotlib đơn giản được tìm thấy ở đây data-blogger.com/2017/11/15/ .
www.data-blogger.com

6
Bạn có thể kiểm tra các phụ trợ có sẵn (như inline) bằng cách nhập : %matplotlib --list.
Luis

Câu trả lời:


285

%matplotliblà một chức năng kỳ diệu trong IPython. Tôi sẽ trích dẫn các tài liệu liên quan ở đây để bạn đọc cho thuận tiện:

IPython có một bộ 'hàm ma thuật' được xác định trước mà bạn có thể gọi bằng cú pháp kiểu dòng lệnh. Có hai loại ma thuật, hướng dòng và hướng tế bào. Các phép thuật dòng được tiền tố với ký tự% và hoạt động giống như các lệnh gọi dòng lệnh của OS: chúng nhận làm đối số cho phần còn lại của dòng, trong đó các đối số được truyền mà không có dấu ngoặc đơn hoặc dấu ngoặc kép. Các phép thuật dòng có thể trả về kết quả và có thể được sử dụng ở phía bên phải của bài tập. Các phép thuật di động được thêm tiền tố với %% và chúng là các hàm nhận làm đối số không chỉ phần còn lại của dòng, mà cả các dòng bên dưới nó trong một đối số riêng biệt.

%matplotlib inline đặt phụ trợ của matplotlib thành phụ trợ 'nội tuyến' :

Với phần cuối này, đầu ra của các lệnh vẽ biểu đồ được hiển thị nội tuyến trong các giao diện như sổ ghi chép Jupyter, ngay bên dưới ô mã đã tạo ra nó. Các ô kết quả sau đó cũng sẽ được lưu trữ trong tài liệu sổ ghi chép.

Khi sử dụng phụ trợ 'nội tuyến', biểu đồ matplotlib của bạn sẽ được bao gồm trong sổ ghi chép của bạn, bên cạnh mã. Cũng có thể đáng đọc Cách tạo dòng máy tính xách tay IPython matplotlib nội tuyến để tham khảo về cách sử dụng nó trong mã của bạn.

Nếu bạn cũng muốn tương tác, bạn có thể sử dụng phụ trợ nbagg với %matplotlib notebook(trong IPython 3.x), như được mô tả ở đây .


4
% matplotlib nội tuyến ^ Cú pháp: cú pháp không hợp lệ

4
@Jadda Bạn đang sử dụng IPython? Nếu không, bạn sẽ gặp lỗi cú pháp, vì đó không phải là CPython hợp lệ (trình thông dịch 'chuẩn' cho Python). Dù sao cũng có ít điểm khi sử dụng nó trừ khi bạn đang sử dụng IPython Notebook, vì toàn bộ vấn đề là kết xuất đồ thị nội tuyến với một notebook.
Aurora0001

Đúng. Tôi đang sử dụng điều này trong Spyder IDE (Một phần của Anaconda) để triển khai API phát hiện đối tượng

3
Trong trường hợp đó, @Jadda, có vẻ như bạn có một câu hỏi mới để hỏi. Bạn nên bao gồm tất cả các chi tiết có liên quan ở đó để bạn có thể nhận được nhiều sự chú ý hơn cho câu hỏi của bạn hơn là trong các bình luận của câu trả lời này. Chúc may mắn.
Aurora0001

2
ok, nhưng phương án thay thế là gì: làm thế nào tôi có thể nhìn thấy các ô nếu không có phép thuật như vậy được kích hoạt?
JaakL

77

Miễn là bạn đang chạy IPython, %matplotlib inlinesẽ làm cho kết quả đầu ra cốt truyện của bạn xuất hiện và được lưu trữ trong sổ ghi chép.

Theo tài liệu

Để thiết lập điều này, trước khi thực hiện bất kỳ âm mưu hoặc nhập khẩu matplotlibnào, bạn phải thực thi %matplotlib magic command. Điều này thực hiện thiết lập hậu trường cần thiết để IPython hoạt động chính xác cùng với matplotlib; tuy nhiên, nó không thực sự thực thi bất kỳ lệnh nhập Python nào, nghĩa là không có tên nào được thêm vào không gian tên.

Một phụ trợ đặc biệt thú vị, được cung cấp bởi IPython, là inlinephụ trợ. Điều này chỉ có sẵn cho Jupyter Notebook và Jupyter QtConsole. Nó có thể được gọi như sau:

%matplotlib inline

Với phần cuối này, đầu ra của các lệnh vẽ biểu đồ được hiển thị nội tuyến trong các giao diện như sổ ghi chép Jupyter, ngay bên dưới ô mã đã tạo ra nó. Các ô kết quả sau đó cũng sẽ được lưu trữ trong tài liệu sổ ghi chép.


32

Nếu bạn muốn thêm các ô vào sổ ghi chép Jupyter của mình, thì đó %matplotlib inlinelà một giải pháp chuẩn. Và có những lệnh ma thuật khác sẽ sử dụng matplotlibtương tác trong Jupyter.

%matplotlib: bất kỳ pltlệnh cốt truyện nào bây giờ sẽ khiến một cửa sổ hình mở ra và các lệnh tiếp theo có thể được chạy để cập nhật cốt truyện. Một số thay đổi sẽ không tự động rút ra, để buộc cập nhật, sử dụngplt.draw()

%matplotlib notebook: sẽ dẫn đến các ô tương tác được nhúng trong sổ ghi chép, bạn có thể phóng to và thay đổi kích thước hình

%matplotlib inline: chỉ vẽ hình ảnh tĩnh trong sổ ghi chép


7

Bắt đầu với IPython 5.0 và matplotlib 2.0, bạn có thể tránh sử dụng ma thuật cụ thể của IPython và sử dụng matplotlib.pyplot.ion()/matplotlib.pyplot.ioff()cũng có những lợi thế khi làm việc bên ngoài IPython.

tài liệu ipython


Tôi nghĩ rằng điều này khác với việc thay đổi phụ trợ. Trừ khi phụ trợ là inline, các ô được tạo trong các cửa sổ bên ngoài và bạn cần sử dụng display () để hiển thị chúng trong sổ ghi chép.
Vincenzooo

4

Nếu bạn không biết phụ trợ là gì, bạn có thể đọc phần này: https://matplotlib.org/tutorials/int sinhtory / usage.html # backends

Một số người sử dụng matplotlib tương tác từ vỏ python và có các cửa sổ âm mưu bật lên khi họ gõ lệnh. Một số người chạy sổ ghi chép Jupyter và vẽ sơ đồ nội tuyến để phân tích dữ liệu nhanh chóng. Những người khác nhúng matplotlib vào các giao diện người dùng đồ họa như wxpython hoặc pygtk để xây dựng các ứng dụng phong phú. Một số người sử dụng matplotlib trong các tập lệnh bó để tạo hình ảnh mô tả từ mô phỏng số và những người khác vẫn chạy các máy chủ ứng dụng web để tự động phục vụ đồ thị. Để hỗ trợ tất cả các trường hợp sử dụng này, matplotlib có thể nhắm mục tiêu các đầu ra khác nhau và mỗi khả năng này được gọi là phụ trợ; "frontend" là mã phải đối mặt với người dùng, tức là mã âm mưu, trong khi "phụ trợ" thực hiện tất cả công việc khó khăn phía sau hậu trường để tạo ra hình.

Vì vậy, khi bạn gõ% matplotlib nội tuyến, nó sẽ kích hoạt phụ trợ nội tuyến. Như đã thảo luận trong các bài viết trước:

Với phần cuối này, đầu ra của các lệnh vẽ biểu đồ được hiển thị nội tuyến trong các giao diện như sổ ghi chép Jupyter, ngay bên dưới ô mã đã tạo ra nó. Các ô kết quả sau đó cũng sẽ được lưu trữ trong tài liệu sổ ghi chép.


4

Điều đó chỉ có nghĩa là bất kỳ biểu đồ nào chúng tôi đang tạo như một phần của mã của chúng tôi sẽ xuất hiện trong cùng một sổ ghi chép và không nằm trong cửa sổ riêng biệt sẽ xảy ra nếu chúng tôi không sử dụng câu lệnh ma thuật này.


3

Để giải thích rõ ràng:

Nếu bạn không thích nó như thế này:

nhập mô tả hình ảnh ở đây

thêm vào %matplotlib inline

nhập mô tả hình ảnh ở đây

và ở đó bạn có nó trong máy tính xách tay jupyter của bạn.


2

TL; DR

%matplotlib inline - Hiển thị nội tuyến đầu ra


Hạt nhân IPython có khả năng hiển thị các ô bằng cách thực thi mã. Hạt nhân IPython được thiết kế để hoạt động trơn tru với thư viện âm mưu matplotlib để cung cấp chức năng này.

%matplotliblà một lệnh ma thuật thực hiện thiết lập hậu trường cần thiết để IPython hoạt động chính xác với nhau matplotlib; nó không thực thi bất kỳ lệnh nhập Python nào, nghĩa là không có tên nào được thêm vào không gian tên.

Hiển thị đầu ra trong cửa sổ riêng

%matplotlib

Hiển thị đầu ra nội tuyến

(chỉ có sẵn cho Jupyter Notebook và Jupyter QtConsole)

%matplotlib inline

Hiển thị với các phụ trợ tương tác

(giá trị hợp lệ 'GTK3Agg', 'GTK3Cairo', 'MacOSX', 'nbAgg', 'Qt4Agg', 'Qt4Cairo', 'Qt5Agg', 'Qt5Cairo', 'TkAgg', 'TkCairo', 'WebAgg', 'WX', 'WXAgg', 'WXCairo', 'agg', 'cairo', 'pdf', 'pgf', 'ps', 'svg', 'template')

%matplotlib gtk

Ví dụ - GTK3Agg - Kết xuất Agg thành khung vẽ GTK 3.x (yêu cầu PyGObject và pycairo hoặc cairocffi).

Thêm chi tiết về phụ trợ tương tác matplotlib: tại đây


Bắt đầu với IPython 5.0matplotlib 2.0bạn có thể tránh việc sử dụng ma thuật cụ thể của IPython và việc sử dụng matplotlib.pyplot.ion()/ matplotlib.pyplot.ioff() cũng có những lợi thế khi làm việc bên ngoài IPython.

Tham khảo: IPython Rich Output - Âm mưu tương tác


Câu hỏi thực sự ở đây, xin lỗi .... "IPython kernel" là gì và "lệnh ma thuật" là gì. Có phải Python đột nhiên tách ra khỏi tôi và biến thành không pythonic? Tôi chưa bao giờ nghe về những khái niệm này.
lb_so

Đối với một máy tính xách tay python (ipynb) - một iernthon kernal hoặc jupyter kernal là phiên bản của python (và phụ thuộc) được sử dụng bởi dự án. Bạn có thể bắt đầu một máy tính xách tay jupyter và sau đó thay đổi các nhân để chạy các ô với cấu hình khác nhau của python và cấu hình các biến môi trường và nhiều hơn nữa.
Ani Menon

@Ib_so Lệnh Magic là một tính năng ipython / jupyter. Đọc thêm tại đây.
Ani Menon

0

Với điều kiện bạn đang chạy Jupyter Notebook, lệnh nội tuyến% matplotlib sẽ làm cho kết quả đầu ra cốt truyện của bạn xuất hiện trong sổ ghi chép, cũng có thể được lưu trữ.


-8

Không bắt buộc phải viết điều đó. Nó hoạt động tốt với tôi mà không có ( %matplotlib) chức năng ma thuật. Tôi đang sử dụng trình biên dịch Sypder, một trình biên dịch đi kèm trong Anaconda.


13
Spyder là một IDE, không phải là trình biên dịch.
Matthieu Brucher

3
Trong khi câu trả lời của bạn không trả lời câu hỏi của OP, nó đã trả lời câu hỏi của tôi. Cảm ơn bạn.
EngrStudent
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.