Cách tạo dòng máy tính xách tay IPython matplotlib nội tuyến


831

Tôi đang cố gắng sử dụng máy tính xách tay IPython trên MacOS X với Python 2.7.2 và IPython 1.1.0.

Tôi không thể lấy đồ họa matplotlib để hiển thị nội tuyến.

import matplotlib
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline  

Tôi cũng đã thử %pylab inlinevà các đối số dòng lệnh ipython --pylab=inlinenhưng điều này không có gì khác biệt.

x = np.linspace(0, 3*np.pi, 500)
plt.plot(x, np.sin(x**2))
plt.title('A simple chirp')
plt.show()

Thay vì đồ họa nội tuyến, tôi nhận được điều này:

<matplotlib.figure.Figure at 0x110b9c450>

matplotlib.get_backend()cho thấy rằng tôi có phần 'module://IPython.kernel.zmq.pylab.backend_inline'phụ trợ.


đoạn mã của bạn không được tạo ra <matplotlib.figure.Figure at 0x110b9c450>nhưng <matplotlib.text.Text at 0x94f9320>(vì dòng cuối cùng của bạn đang in một tiêu đề). Dù sao, mã của bạn (với% matplotlib nội tuyến và plt.show ()) hoạt động như mong đợi trên các cửa sổ
joaquin

Cảm ơn những lời đề nghị đó, nhưng chúng không hiệu quả với tôi. Tôi vẫn nhận được đầu ra ở trên không có đồ họa nội tuyến. Bạn có lời khuyên xử lý sự cố nào không?
Ian Fiske

không có đầu mối. Cùng một python, cùng một ipython (và cùng một phụ trợ) nhưng trên windows và nó hoạt động .... Tôi cho rằng cốt truyện đang hoạt động cho bạn khi không phải nội tuyến, phải không?
joaquin

2
không có %matplotlib inline, kernel vẫn bận rộn vĩnh viễn và tôi không nhận được kết quả đầu ra. Nó phải bị giết. Điều này đang cố gắng sử dụng MacOSXphụ trợ nhưng tôi đoán nó không thể được mở vì một số lý do. Khi không sử dụng máy tính xách tay ipython, phụ trợ MacOSX cho matplotlib chỉ hoạt động tốt.
Ian Fiske

1
Tôi có một triệu chứng giống hệt nhau nhưng hóa ra tôi đã cài đặt phiên bản Canopy 32 bit trên OSX 10.8. Cài đặt lại với phiên bản 64 bit đã sửa nó.
Vicky T

Câu trả lời:


1130

Tôi đã sử dụng %matplotlib inlinetrong ô đầu tiên của máy tính xách tay và nó hoạt động. Tôi nghĩ bạn nên thử:

%matplotlib inline

import matplotlib
import numpy as np
import matplotlib.pyplot as plt

Theo mặc định, bạn cũng có thể bắt đầu tất cả các hạt nhân IPython của mình ở chế độ nội tuyến bằng cách đặt các tùy chọn cấu hình sau trong tệp cấu hình của bạn:

c.IPKernelApp.matplotlib=<CaselessStrEnum>
  Default: None
  Choices: ['auto', 'gtk', 'gtk3', 'inline', 'nbagg', 'notebook', 'osx', 'qt', 'qt4', 'qt5', 'tk', 'wx']
  Configure matplotlib for interactive use with the default matplotlib backend.

7
Tôi sẽ đánh dấu đây là câu trả lời đúng. Giải pháp thay thế --pylab inlinehoạt động, nhưng chào bạn với cảnh báo sau: Bắt đầu tất cả các hạt nhân ở chế độ pylab không được khuyến nghị và sẽ bị vô hiệu hóa trong phiên bản tương lai. Vui lòng sử dụng phép thuật% matplotlib để bật matplotlib thay thế. pylab ngụ ý nhiều nhập khẩu, có thể có tác dụng phụ khó hiểu và gây hại cho khả năng tái tạo của máy tính xách tay của bạn.
mpavlov

1
@ eNord9 @mightwolf: Tôi đang học cách sử dụng iPython (và lập trình Python thay vì Matlab); những gì hiện import matplotlib' do versus matplotlib nhập khẩu theo [name] '? Tha thứ cho nhận xét đơn giản
TSGM

1
@ eNord9 @mightwolf: và làm thế nào điều này so sánh với 'từ mpl nhập khẩu matplotlib'.
TSGM

2
@TSGM Lời giải thích tốt nhất tôi từng thấy cho câu hỏi của bạn là: effbot.org/zone/import-confusion.htmlm
mpavlov

Cảm ơn @ eNord9. Tôi vừa kiểm tra các lệnh của bạn vì đã được một thời gian với các bản cập nhật và tất cả. Bây giờ mọi thứ hoạt động tốt trên Python 2.7.9 và IPython 3.1.0.
Ian Fiske

216

Nếu phiên bản matplotlib của bạn trên 1.4, bạn cũng có thể sử dụng

IPython 3.x trở lên

%matplotlib notebook

import matplotlib.pyplot as plt

Các phiên bản cũ hơn

%matplotlib nbagg

import matplotlib.pyplot as plt

Cả hai sẽ kích hoạt phụ trợ nbagg , cho phép tương tác.

Ví dụ cốt truyện với phụ trợ nbagg


Điều này dường như không làm việc với %config InlineBackend.figure_format='retina'. Bất kỳ ý tưởng làm thế nào để có được số liệu Retina tương tác?
orome

Hmm ... Tôi thực sự không có quá nhiều chuyên môn với số liệu võng mạc. Điều duy nhất tôi vấp phải là liên kết này , nhưng nó có thể không được chấp nhận. Nếu nhiều người thắc mắc về điều tương tự, tôi liên kết câu hỏi SO của bạn ở đây và chúc bạn may mắn với câu trả lời ở đó. Tốt nhất
Løiten

31
Câu trả lời này được đánh giá thấp. %matplotlib notebookcung cấp trực quan tốt hơn %matplotlib inline.
Hiếu

9
việc sử dụng %matplotlib notebookkhông hoạt động (loại hiển thị một cái gì đó, sau đó để trống) trên máy tính xách tay jupyter 4.1.1 / ubfox 16.04 / chrome, %matplotlib inlinekhông hiển thị hình ảnh, nhưng chúng xuất hiện sau văn bản đánh dấu, không phải là "nội tuyến".
michael

6
Nếu bạn đã thử %matplotlib inlinetrước và sau đó chuyển sang %matplotlib notebook, bạn có thể nhận được kết quả trống. Khởi động lại kernel và chạy lại.
Công nghệ

91

Ctrl + Enter

%matplotlib inline

Dòng ma thuật: D

Xem: Âm mưu với Matplotlib .


1
@BradleyKreider Chưa chết. Ngoài ra, bạn có thể truy cập ipython repo trên github, đi vào thư mục 'ví dụ', tìm 'Âm mưu với Matplotlib'.
CodeFarmer

24

Sử dụng %pylab inlinelệnh ma thuật.


14
Không còn: "ipython notebook --pylab inline [E 15: 01: 18.182 NotebookApp] Hỗ trợ chỉ định --pylab trên dòng lệnh đã bị xóa. [E 15: 01: 18.182 NotebookApp] Vui lòng sử dụng %pylab inlinehoặc %matplotlib inlinetrong chính notebook. "
Dave X

14

Để đặt matplotlib theo mặc định trong Jupyter (IPython 3):

  1. Chỉnh sửa tập tin ~/.ipython/profile_default/ipython_config.py

  2. Thêm dòng c.InteractiveShellApp.matplotlib = 'inline'

Xin lưu ý rằng việc thêm dòng này ipython_notebook_config.pysẽ không hoạt động. Nếu không, nó hoạt động tốt với Jupyter và IPython 3.1.0


10

Tôi phải đồng ý với foobarbiru (Tôi không có đủ recs để có thể chỉ cần chèn một bình luận dưới bài đăng của anh ấy):

Bây giờ chúng tôi khuyên rằng máy tính xách tay python không bắt đầu với lý lẽ --pylabvà theo Fernando Perez (người tạo ra ipythonnb) %matplotlib inlinenên là lệnh máy tính xách tay ban đầu.

Xem tại đây: http://nbviewer.ipython.org/github/ipython/ipython/blob/1.x/examples/notebooks/Part%203%20-%20Plinating%20with%20Matplotlib.ipynb


7

Tôi tìm thấy một cách giải quyết khá thỏa đáng. Tôi đã cài đặt Anaconda Python và bây giờ nó hoạt động tốt.


5

Tôi đã cài đặt anaconda nhưng matplotlib không có âm mưu

Nó bắt đầu âm mưu khi tôi làm điều này

import matplotlib
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline  

2

Bạn có thể mô phỏng vấn đề này với một lỗi cú pháp, tuy nhiên, %matplotlib inline sẽ không giải quyết được vấn đề.

Đầu tiên là một ví dụ về cách đúng để tạo ra một cốt truyện. Mọi thứ hoạt động như mong đợi với hàng nhập khẩu và ma thuật mà eNord9 cung cấp.

df_randNumbers1 = pd.DataFrame(np.random.randint(0,100,size=(100, 6)), columns=list('ABCDEF'))

df_randNumbers1.ix[:,["A","B"]].plot.kde()

Tuy nhiên, bằng cách rời khỏi () cuối của loại cốt truyện, bạn sẽ nhận được một lỗi không mơ hồ.

Mã lỗi:

df_randNumbers1.ix[:,["A","B"]].plot.kde

Ví dụ lỗi:

<bound method FramePlotMethods.kde of <pandas.tools.plotting.FramePlotMethods object at 0x000001DDAF029588>>

Khác với thông báo một dòng này, không có dấu vết ngăn xếp hoặc lý do rõ ràng nào khác để nghĩ rằng bạn đã mắc lỗi cú pháp. Cốt truyện không in.


Đây không phải là một lỗi cú pháp - mà không ()để gọi kde , ipython đang nói với bạn những gì kde , cụ thể là, một phương pháp ràng buộc. Vì vậy, trên thực tế từ quan điểm của iPython, đây hoàn toàn không phải là một "lỗi", do đó tại sao không có dấu vết ngăn xếp.
Kyle Strand

1
@KyleStrand Cảm ơn. Sau khi đọc lại bài đăng của tôi, điều tôi nên nói là: "Tôi nghĩ rằng tôi gặp vấn đề là không có âm mưu của mình để hiển thị nội tuyến bằng %matplotlib inlinelệnh. Thực sự tôi chỉ quên đặt () vào cuối loại cốt truyện. Vì vậy, nếu mọi thứ khác đều thất bại, hãy nhìn vào dấu ngoặc đơn của bạn để biết lỗi. "
Blake M

1

Tôi gặp vấn đề tương tự khi tôi đang chạy các lệnh vẽ trong các ô riêng biệt trong Jupyter:

In [1]:  %matplotlib inline
         import matplotlib
         import matplotlib.pyplot as plt
         import numpy as np
In [2]:  x = np.array([1, 3, 4])
         y = np.array([1, 5, 3])
In [3]:  fig = plt.figure()
         <Figure size 432x288 with 0 Axes>                      #this might be the problem
In [4]:  ax = fig.add_subplot(1, 1, 1)
In [5]:  ax.scatter(x, y)
Out[5]:  <matplotlib.collections.PathCollection at 0x12341234>  # CAN'T SEE ANY PLOT :(
In [6]:  plt.show()                                             # STILL CAN'T SEE IT :(

Vấn đề đã được giải quyết bằng cách hợp nhất các lệnh vẽ biểu đồ vào một ô duy nhất:

In [1]:  %matplotlib inline
         import matplotlib
         import matplotlib.pyplot as plt
         import numpy as np
In [2]:  x = np.array([1, 3, 4])
         y = np.array([1, 5, 3])
In [3]:  fig = plt.figure()
         ax = fig.add_subplot(1, 1, 1)
         ax.scatter(x, y)
Out[3]:  <matplotlib.collections.PathCollection at 0x12341234>
         # AND HERE APPEARS THE PLOT AS DESIRED :)
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.