Làm cách nào để mở cửa sổ matplotlib tương tác trong sổ ghi chép IPython?


125

Tôi đang sử dụng IPython với --pylab=inlinevà đôi khi muốn nhanh chóng chuyển sang GUI matplotlib tương tác, có thể thu phóng để xem các ô (cái bật lên khi bạn vẽ một thứ gì đó trong bảng điều khiển Python đầu cuối). Làm thế nào tôi có thể làm điều đó? Tốt hơn là không rời khỏi hoặc khởi động lại sổ ghi chép của tôi.

Vấn đề với các ô nội tuyến trong máy tính xách tay IPy là chúng có độ phân giải hạn chế và tôi không thể phóng to chúng để xem một số phần nhỏ hơn. Với maptlotlib GUI bắt đầu từ một thiết bị đầu cuối, tôi có thể chọn một hình chữ nhật của biểu đồ mà tôi muốn phóng to và các trục điều chỉnh cho phù hợp. Tôi đã thử thử nghiệm với

from matplotlib import interactive
interactive(True)

interactive(False)

nhưng điều đó không làm gì cả. Tôi cũng không thể tìm thấy bất kỳ gợi ý nào trên mạng.


4
Một giải pháp khả thi cho vấn đề ban đầu của bạn được cho phép phóng to trong âm mưu nội tuyến của bạn, mà bây giờ có thể như tôi đã mô tả ở đây: stackoverflow.com/a/22949003/145823
yonilevy

3
%matplotlib notebook làm việc
muon

Câu trả lời:


140

Theo tài liệu , bạn sẽ có thể chuyển đổi qua lại như sau:

In [2]: %matplotlib inline 
In [3]: plot(...)

In [4]: %matplotlib qt  # wx, gtk, osx, tk, empty uses default
In [5]: plot(...) 

và điều đó sẽ bật lên một cửa sổ âm mưu thông thường (có thể cần khởi động lại sổ ghi chép).

Tôi hi vọng cái này giúp được.


2
%pylab qt. Không hoạt động trong OS X. Có thể trong Ubuntu nó sẽ hữu ích.
metakermit

11
Rất tiếc, bạn không thể chuyển qua lại. Nếu bạn cố gắng chuyển đổi sau khi bắt đầu với pylab = inline hoặc pylab = qt, bạn sẽ nhận được: Lệnh gọi tới matplotlib.use () này không có tác dụng vì phần phụ trợ đã được chọn; matplotlib.use () phải được gọi trước khi nhập pylab, matplotlib.pyplot hoặc matplotlib.backends lần đầu tiên.
Charl Botha

3
Tôi đã phản đối điều này vì nó không hoạt động với tôi và vẫn không, nhưng rõ ràng đây là vấn đề năm 1927 và nó lẽ ra đã được sửa bằng hợp nhất 2179 . @yarox, nếu bạn chỉnh sửa câu trả lời của mình để kết hợp thông tin này, tôi sẽ hoàn tác phản đối của mình.
askewchan

2
hoạt động tốt ở đây trên OSX là tốt, sử dụng ipython v1.1.0 và MPL 1.3.0
K.-Michael Aye

1
Hoạt động cho tôi bây giờ (2014-08) bằng cách sử dụng phiên bản Python 2.7 hiện tại trên Win7 x64.
nerdfever.com

65

Nếu tất cả những gì bạn muốn làm là chuyển từ các âm mưu nội tuyến sang tương tác và quay lại (để bạn có thể xoay / thu phóng), thì tốt hơn là sử dụng% matplotlib magic.

#interactive plotting in separate window
%matplotlib qt 

và quay lại html

#normal charts inside notebooks
%matplotlib inline 

% pylab magic nhập một loạt các thứ khác và thậm chí có thể dẫn đến xung đột. Nó thực hiện "from pylab import *".

Bạn cũng có thể sử dụng chương trình phụ trợ sổ tay mới (được thêm vào matplotlib 1.4):

#interactive charts inside notebooks, matplotlib 1.4+
%matplotlib notebook 

Nếu bạn muốn có nhiều tương tác hơn trong biểu đồ của mình, bạn có thể xem mpld3bokeh . mpld3 là tuyệt vời, nếu bạn không có hàng tấn điểm dữ liệu (ví dụ: <5k +) và bạn muốn sử dụng cú pháp matplotlib bình thường, nhưng tương tác nhiều hơn, so với sổ ghi chép% matplotlib. Bokeh có thể xử lý nhiều dữ liệu, nhưng bạn cần tìm hiểu cú pháp của nó vì nó là một thư viện riêng biệt.

Ngoài ra, bạn có thể xem pivottablejs (pip cài đặt pivottablejs)

from pivottablejs import pivot_ui
pivot_ui(df)

Tuy nhiên, việc khám phá dữ liệu tương tác thú vị là, nó hoàn toàn có thể gây rối với khả năng tái tạo. Điều đó đã xảy ra với tôi, vì vậy tôi cố gắng chỉ sử dụng nó ở giai đoạn đầu và chuyển sang matplotlib / seaborn nội tuyến thuần túy, khi tôi đã cảm nhận được dữ liệu.


1
Warning: Cannot change to a different GUI toolkit: notebook. Using qt instead.cho %matplotlib notebook.
mLstudent33

1
ImportError: Failed to import any qt bindingcho lệnh ma thuật qt
mLstudent33

31

Bắt đầu với matplotlib 1.4.0, bây giờ có một chương trình phụ trợ tương tác để sử dụng trong sổ ghi chép

%matplotlib notebook

Có một vài phiên bản của IPython không đăng ký bí danh đó, lỗi trở lại là:

%matplotlib nbagg

Nếu điều đó không hoạt động, hãy cập nhật IPython cho bạn.

Để chơi với cái này, goto tmpnb.org

và dán

%matplotlib notebook

import pandas as pd
import numpy as np
import matplotlib

from matplotlib import pyplot as plt
import seaborn as sns

ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts = ts.cumsum()

df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index,
                  columns=['A', 'B', 'C', 'D'])
df = df.cumsum()
df.plot(); plt.legend(loc='best')    

vào một ô mã (hoặc chỉ sửa đổi sổ ghi chép demo python hiện có)


6

Giải pháp tốt hơn cho vấn đề của bạn có thể là thư viện Biểu đồ . Nó cho phép bạn sử dụng thư viện javascript Highcharts tuyệt vời để tạo ra các bản vẽ đẹp và tương tác. Highcharts sử dụng svgthẻ HTML để tất cả các biểu đồ của bạn thực sự là hình ảnh vectơ.

Một số tính năng:

  • Biểu đồ vectơ mà bạn có thể tải xuống ở các định dạng .png, .jpg và .svg để bạn sẽ không bao giờ gặp vấn đề về độ phân giải
  • Biểu đồ tương tác (thu phóng, trượt, di chuột qua các điểm, ...)
  • Sử dụng được trong máy tính xách tay IPython
  • Khám phá hàng trăm cấu trúc dữ liệu cùng lúc bằng cách sử dụng khả năng vẽ biểu đồ không đồng bộ.

Tuyên bố từ chối trách nhiệm: Tôi là nhà phát triển của thư viện


Một thư viện khá đẹp! Tôi chắc chắn sẽ dùng thử :)
metakermit

Cảm ơn! Hãy cho tôi biết suy nghĩ của bạn trên github và gửi vấn đề nếu bạn gặp phải bất kỳ sự cố nào :)
arnoutaertgeerts

1
Mặc dù câu trả lời này chắc chắn có liên quan, nhưng tôi không nhất thiết phải gọi nó là "một giải pháp tốt hơn". Đó là điều rất có thể đã gây ra một cuộc tán thành trong quá khứ.
volodymyr

1
Bị phản đối, vì bài đăng này không cho tôi biết cách tôi thực sự có thể sử dụng thư viện Biểu đồ để mở một cửa sổ biểu đồ tương tác.
Robert Hönig

4

Tôi đang sử dụng ipython trong "jupyter QTConsole" từ Anaconda tại www.continuum.io/downloads vào ngày 28/5/20117.

Đây là một ví dụ để lật qua lại giữa một cửa sổ riêng biệt và một chế độ cốt truyện nội tuyến bằng phép thuật ipython.

>>> import matplotlib.pyplot as plt

# data to plot
>>> x1 = [x for x in range(20)]

# Show in separate window
>>> %matplotlib
>>> plt.plot(x1)
>>> plt.close() 

# Show in console window
>>> %matplotlib inline
>>> plt.plot(x1)
>>> plt.close() 

# Show in separate window
>>> %matplotlib
>>> plt.plot(x1)
>>> plt.close() 

# Show in console window
>>> %matplotlib inline
>>> plt.plot(x1)
>>> plt.close() 

# Note: the %matplotlib magic above causes:
#      plt.plot(...) 
# to implicitly include a:
#      plt.show()
# after the command.
#
# (Not sure how to turn off this behavior
# so that it matches behavior without using %matplotlib magic...)
# but its ok for interactive work...

1
Khi tôi cố gắng sử dụng %matplotlibtôi nhận được một lỗi mà kết thúc vớiImportError: No module named 'PyQt4'
user3731622

Tôi gặp sự cố giống hệt như user3731622. Những gì có thể được thực hiện? Đây là cho hầu hết các câu trả lời trên trang này
bernando_vialli Ngày

@mkheifetz @ user3731622 Bạn có thể cần cài đặt gói này: sudo apt-get install python-pyqt5hoặcsudo apt-get install python-pyqt5
ttb


0

Bạn có thể dùng

%matplotlib qt

Nếu bạn gặp lỗi, ImportError: Failed to import any qt bindinghãy cài đặt PyQt5 dưới dạng: pip install PyQt5và nó hoạt động với tôi.

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.