Làm cách nào để lấy lại các ô tương tác trong Spyder / IPython / matplotlib?


91

Tôi đã nâng cấp từ Python (x, y) 2.7.2.3 lên 2.7.6.0 trong Windows 7 (và rất vui khi thấy rằng cuối cùng tôi có thể nhập function_name?và xem lại chuỗi tài liệu trong Trình kiểm tra đối tượng) nhưng bây giờ âm mưu không hoạt động như nó đã từng.

Trước đây (Spyder 2.1.9, IPython 0.10.2, matplotlib 1.2.1), ví dụ: khi tôi vẽ tập lệnh này , nó sẽ vẽ các ô con cạnh nhau trong một cửa sổ tương tác:

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

Bây giờ (Spyder 2.2.5, IPython 1.2.0, Matplotlib 1.3.1) khi tôi cố gắng vẽ mọi thứ, nó hiển thị các ô con dưới dạng các PNG nội tuyến nhỏ, đây là một thay đổi trong IPython :

PNG trong dòng nhỏ

Vì vậy, tôi đã đi vào các tùy chọn và tìm thấy điều này:

tùy chọn đồ họa

điều này dường như nói rằng tôi có thể lấy lại các ô tương tác cũ, với 4 ô phụ được hiển thị cạnh nhau, nhưng khi tôi chuyển sang "Tự động" và cố gắng vẽ một thứ gì đó, nó không có tác dụng gì. Không có âm mưu nào cả.

Nếu tôi chuyển menu thả xuống này thành Qt hoặc bỏ chọn "Kích hoạt hỗ trợ", nó sẽ chỉ lập sơ đồ phụ đầu tiên hoặc một phần của nó, rồi dừng lại:

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

Làm cách nào để tôi có được hành vi cũ của 4 ô phụ cạnh nhau trong một hình duy nhất mà tôi có thể tương tác?


Tôi nghĩ rằng đây sẽ là một báo cáo lỗi cho pythonxy. Suy đoán ngây thơ của tôi là họ đang sử dụng pyplot để xử lý tất cả các âm mưu ở đó và bị cắn vào mông vì nó (có vẻ sai, vì họ có tiện ích qt của riêng họ).
tacaswell

1
@tcaswell "Họ" là ai và họ sẽ sử dụng gì thay vì pyplot?
endolith

1
Bạn có thể tái tạo sự cố này bên ngoài pythonxy (chỉ sử dụng thẳng ipython + qtconsole) không? Không có đủ thông tin ở đây để phân loại điều gì đang xảy ra.
tacaswell

1
Tôi đoán đó là một lỗi trong Spyder (Spyder là IDE, pythonxy là bản phân phối).
Thomas K

1
@tcaswell: Aha. Có vẻ như tập lệnh của tôi đang tạo ra lỗi matplotlib sau đó được gửi đến một nơi nào đó khác ngoài bảng điều khiển IPython. Chúng hiển thị nếu tôi sử dụng bảng điều khiển Qt thay vào đó, và bây giờ tôi tìm kiếm nó, chúng xuất hiện trong tab Bảng điều khiển thông thường của Spyder. Nếu tôi tạo một tập lệnh đơn giản hơn, nó sẽ hoạt động, dù là máy trạng thái hay hướng đối tượng. Tôi cho rằng mình phải thay đổi một số cài đặt IPython vì các ô nội tuyến mới.
endolith

Câu trả lời:


134

Thay đổi chương trình phụ trợ thành tự động:

Công cụ> tùy chọn> Bảng điều khiển IPython> Đồ họa> Phần phụ trợ đồ họa> Phần phụ trợ: Tự động

Sau đó đóng và mở Spyder.


27
Việc đóng và mở thực sự là cần thiết. Chỉ tự hỏi tại sao đây không phải là giá trị mặc định.
Mathias711

5
Ngoài ra, đối với bất kỳ ai vẫn không nhìn thấy âm mưu của họ (như tôi đã không), cửa sổ âm mưu có thể đang âm thầm xuất hiện_behind_ cửa sổ giao diện điều khiển của bạn (ít nhất là nó có trong Spyder trên Windows 10) nên bạn có thể phải tìm kiếm cửa sổ của mình.
Joshua Glazer

3
Đối với những người gặp khó khăn trong việc tìm kiếm điều này, nó được đặt tạipython > preferences > IPython console > Graphics > Graphics backend > Backend: Automatic
cameronroytaylor,

6
Thay vì khởi động lại Spyder, bạn cũng có thể chỉ cần khởi động lại hạt nhân (bằng cách nhấp vào bánh xe cài đặt trong bảng điều khiển và sau đó "Khởi động lại hạt nhân" hoặc thông qua một phím tắt (trên Mac Cmd +.)
Michael

Tôi không biết tại sao, nhưng việc thay đổi thành Tự động, khởi động lại Spyder, sau đó thay đổi trở lại Nội tuyến khiến các âm mưu nội tuyến bắt đầu hiển thị bất cứ khi nào tôi đưa ra lệnh đầu vào trong một vòng lặp. Điều này rất hữu ích!
Josiah Yoder

50

Bạn có thể nhanh chóng kiểm soát điều này bằng cách nhập các lệnh ma thuật được tích hợp sẵn trong bảng điều khiển IPython của Spyder, tôi thấy nhanh hơn việc chọn chúng từ menu tùy chọn. Các thay đổi có hiệu lực ngay lập tức mà không cần khởi động lại Spyder hoặc kernel.

Để chuyển sang ô "tự động" (tức là tương tác), hãy nhập:

%matplotlib auto

sau đó nếu bạn muốn chuyển về "nội tuyến", hãy nhập:

%matplotlib inline

(Lưu ý: các lệnh này không hoạt động trong bảng điều khiển không phải IPython)

Xem thêm thông tin cơ bản về chủ đề này: Mục đích của "% matplotlib inline"


Trong Python 3.6, tôi lấy đượcmatplotlib inline File "<stdin>", line 1 %matplotlib inline ^ SyntaxError: invalid syntax
Karlo

2
@Karlo rằng lỗi dự kiến ​​từ trình thông dịch "python" thông thường. Cú pháp này chỉ hợp lệ với ipython hoặc Spyder.
Mike T

OK, tôi đang sử dụng nó trong Spyder nhưng trong bảng điều khiển Python. Thật vậy, nó hoạt động trong bảng điều khiển IPython.
Karlo

3
Có cách nào để thiết lập nó bằng cách sử dụng tập lệnh không? Cụ thể là để chọn đâu là đầu ra của biểu đồ trong một tập lệnh? Cảm ơn bạn.
Royi

1
Điều này dường như không hoạt động trong Spyder, mặc dù đó là cách thực hiện trong một cửa sổ IPython bình thường. Sử dụng các tùy chọn menu phù hợp với tôi; không chắc tại sao điều này không.
Rùa là dễ thương

10

Sau khi áp dụng: Công cụ> tùy chọn> Đồ họa> Phụ trợ> Tự động Chỉ cần khởi động lại hạt nhân nhập mô tả hình ảnh ở đây

Và bạn chắc chắn sẽ nhận được Cốt truyện tương tác. Chúc bạn mã hóa vui vẻ!


5

Như đã nói trong phần bình luận, vấn đề nằm ở kịch bản của bạn. Trên thực tế, có 2 vấn đề:

  • Có một lỗi matplotlib, tôi đoán rằng bạn đang chuyển một đối số là None ở đâu đó. Có lẽ do defaultdict?
  • Bạn gọi show()sau mỗi ô phụ. show()nên được gọi một lần ở cuối tập lệnh của bạn. Cách thay thế là sử dụng chế độ tương tác, tìm iontrong tài liệu của matplotlib.

2

Điều này thực sự khá dễ sửa chữa và không mất bất kỳ mã hóa nào:

1. nhấp vào tab Plots phía trên bảng điều khiển. Sau đó, ở góc trên cùng bên phải của màn hình ô, nhấp vào nút tùy chọn. 3.Cuối cùng bỏ chọn nút "Tắt âm mưu nội tuyến"

Bây giờ, hãy chạy lại tập lệnh của bạn và đồ thị của bạn sẽ hiển thị trong bảng điều khiển.

Chúc mừng.

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.