Không có cửa sổ cốt truyện trong matplotlib


90

Tôi vừa cài đặt matplotlib trong Ubuntu 9.10 bằng hệ thống gói synap. Tuy nhiên, khi tôi thử ví dụ đơn giản sau

>>> from pylab import plot;
>>> plot([1,2,3],[1,2,3])
[<matplotlib.lines.Line2D object at 0x9aa78ec>]

Tôi không nhận được cửa sổ âm mưu. Bất kỳ ý tưởng về cách hiển thị cửa sổ cốt truyện?


8
pylab không hiển thị cốt truyện theo mặc định, vì việc vẽ và cập nhật liên tục có thể tốn kém. Bạn cần phải làm một cách rõ ràng show().
Alok Singhal

1
Một số tài liệu chính thức về vấn đề này: matplotlib.org/faq/...
stephenbez

Câu trả lời:


139

Bạn có thể gõ

import pylab
pylab.show()

hoặc tốt hơn, sử dụng ipython -pylab.


Vì việc sử dụng pylab không được khuyến khích nữa , giải pháp ngày nay sẽ là

import matplotlib.pyplot as plt

plt.plot([1,2,3])

plt.show()

38

pylab.show() hoạt động nhưng khối (bạn cần phải đóng cửa sổ).

Một giải pháp thuận tiện hơn nhiều là thực hiện pylab.ion()(bật chế độ tương tác) khi bạn bắt đầu: tất cả các lệnh (tương đương với pylab của) đều pyplot.*hiển thị âm mưu của chúng ngay lập tức. Thông tin thêm về chế độ tương tác có thể được tìm thấy trên trang web chính thức.

Tôi cũng thứ hai bằng cách sử dụng tiện lợi hơn ipython -pylab( --pylab, trong các phiên bản mới hơn), cho phép bạn bỏ qua from … import …phần (cũng %pylabhoạt động, trong các phiên bản IPython mới hơn).


1
nhưng bạn cần phải gọi pylab.show()trước để thậm chí mở một con số.
Steve Tjoa

3
@Steve: kinh nghiệm của tôi là điều này phụ thuộc rất nhiều vào phụ trợ. Trên Mac OS X với trình bao Python thông thường, tôi không phải thực hiện show () (hoặc draw (), đối với vấn đề đó): plot () mở một cửa sổ mới.
Eric O Lebigot

1
À được rồi. Điểm tốt. Tôi chỉ có kinh nghiệm với ipython trong Linux.
Steve Tjoa

draw () không hoạt động với tôi, nhưng pylab.ion () hoạt động. Tôi đang sử dụng OSX
user1506145

Điều tương tự ở đây trong trình bao Python với Matplotlib mới nhất. Tôi đã cập nhật câu trả lời của mình, cảm ơn.
Eric O Lebigot


11

Đoạn mã dưới đây hoạt động trên cả Eclipse và Python shell:

import numpy as np
import matplotlib.pyplot as plt

# Come up with x and y
x = np.arange(0, 5, 0.1)
y = np.sin(x)

# Just print x and y for fun
print x
print y

# Plot the x and y and you are supposed to see a sine curve
plt.plot(x, y)

# Without the line below, the figure won't show
plt.show()

Như nhiều câu trả lời khác đã làm rõ, điều này có thể phù hợp với bạn vào lúc này, nhưng tất cả phụ thuộc vào cách cấu hình phần phụ trợ matplotlib của bạn.
nealmcb

9

Bất kỳ lỗi hiển thị? Điều này có thể là một vấn đề do không thiết lập phụ trợ. Bạn có thể đặt nó từ trình thông dịch Python hoặc từ tệp cấu hình ( .matplotlib/matplotlibrc) trong thư mục chính của bạn.

Để đặt chương trình phụ trợ trong mã, bạn có thể làm

import matplotlib
matplotlib.use('Agg')

trong đó 'Agg' là tên của chương trình phụ trợ. Những phần phụ trợ nào hiện có tùy thuộc vào cài đặt và hệ điều hành của bạn.

http://matplotlib.sourceforge.net/faq/installing_faq.html#backends

http://matplotlib.org/users/customizing.html


1
Hoàn toàn hoạt động, cảm ơn. Để rõ ràng, điều đơn giản nhất cần làm (một khi bạn biết điều này tất nhiên đang hoạt động) là đặt chương trình phụ trợ của bạn .matplotlib/matplotlibrcthành backend: Agg. Sau đó, bạn không cần phải rõ ràng usemột mỗi lần :)
dsummersl

2

IPython hiện đại sử dụng --matplotlibđối số "" với tham số phụ trợ tùy chọn. Nó mặc định là "tự động", thường đủ tốt trên Mac và Windows. Tôi chưa thử nghiệm nó trên Ubuntu hoặc bất kỳ bản phân phối Linux nào khác, nhưng tôi hy vọng nó sẽ hoạt động.

ipython --matplotlib

0

Nếu bạn gặp sự cố pylab.show()đóng băng cửa sổ IPython (đây có thể là Mac OS X cụ thể; không chắc chắn), bạn có thể cmd-c trong cửa sổ IPython, chuyển sang cửa sổ âm mưu và nó sẽ thoát ra.

Rõ ràng, các cuộc gọi tới pylab.show()sẽ không đóng băng cửa sổ IPython, chỉ cuộc gọi đầu tiên. Thật không may, tôi nhận thấy rằng hành vi của cửa sổ âm mưu / tương tác với show () thay đổi mỗi khi tôi cài đặt lại matplotlib, vì vậy giải pháp này có thể không phải lúc nào cũng ổn.


0

Nếu bạn đang bắt đầu IPython với --pylabtùy chọn, bạn không cần gọi show()hoặc draw(). Thử đi:

ipython  --pylab=inline

0

--pylabkhông còn hoạt động cho Jupyter nữa , nhưng may mắn thay, chúng tôi có thể thêm một chỉnh sửa trong ipython_config.pytệp để có được cả hai chức năng pylabcũng như autoreload.

c.InteractiveShellApp.extensions = ['autoreload', 'pylab']
c.InteractiveShellApp.exec_lines = ['%autoreload 2', '%pylab']

0

Nếu bạn là người dùng Anaconda và Spyder thì giải pháp tốt nhất cho bạn là:

Công cụ -> Tùy chọn -> Bảng điều khiển Ipython -> Phần đồ họa

Sau đó, trong phần Hỗ trợ đồ họa (Matplotlib) :

chọn hai tùy chọn khả dụng

và trong Phần phụ trợ đồ họa :

chọn Tự động


-5

Một khả năng khác khi sử dụng easy_install là bạn cần yêu cầu phiên bản matplotlib mới nhất. Thử:

import pkg_resources
pkg_resources.require("matplotlib")

trước khi bạn nhập matplotlib hoặc bất kỳ mô-đun nào của nó.


2
Điều này chỉ đảm bảo đã matplotlibđược cài đặt, không ảnh hưởng đến cách xử lý cửa sổ được thực hiện.
tacaswell
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.