matplotlib không hiển thị bản vẽ của tôi mặc dù tôi gọi pyplot.show ()


175

Trợ giúp cần thiết trên matplotlib. Có, tôi đã không quên gọi pyplot.show ().

$ ipython --pylab

import matplotlib.pyplot as p 
p.plot(range(20), range(20))

Nó trả về matplotlib.lines.Line2D at 0xade2b2cnhư đầu ra.

p.show()

Không có gì để xảy ra. Không có thông báo lỗi. Không có cửa sổ mới. Không có gì. Tôi cài đặtmatplotlib bằng cách sử dụng pip và tôi không nhận bất kỳ thông báo lỗi nào.

Chi tiết:

Tôi sử dụng,

  • Ubuntu
  • IPython v0.11
  • Python v2.6.6
  • matplotlib v1.0.1

Câu trả lời:


177

Nếu tôi đặt backend của tôi để template~/.matplotlib/matplotlibrc, sau đó tôi có thể tái tạo các triệu chứng của bạn:

~ / .matplotlib / matplotlibrc:

# backend      : GtkAgg
backend      : template

Lưu ý rằng các tập tin matplotlibrccó thể không có trong thư mục ~/.matplotlib/. Trong trường hợp này, đoạn mã sau cho biết nó ở đâu:

>>> import matplotlib
>>> matplotlib.matplotlib_fname()

In [1]: import matplotlib.pyplot as p

In [2]: p.plot(range(20),range(20))
Out[2]: [<matplotlib.lines.Line2D object at 0xa64932c>]

In [3]: p.show()

Nếu bạn chỉnh sửa ~/.matplotlib/matplotlibrcvà thay đổi phụ trợ thành một cái gì đó như GtkAgg, bạn sẽ thấy một cốt truyện. Bạn có thể liệt kê tất cả các phụ trợ có sẵn trên máy của mình với

import matplotlib.rcsetup as rcsetup
print(rcsetup.all_backends)

Nó sẽ trả về một danh sách như:

['GTK', 'GTKAgg', 'GTKCairo', 'FltkAgg', 'MacOSX', 'QtAgg', 'Qt4Agg',
'TkAgg', 'WX', 'WXAgg', 'CocoaAgg', 'agg', 'cairo', 'emf', 'gdk', 'pdf',
'ps', 'svg', 'template']

Tài liệu tham khảo:


2
Tôi đã thử nhưng tôi đã gặp một lỗi như:ImportError: No module named _backend_gdk
Baskaya

6
Xin lỗi vì rất nhiều bình luận. Nó hoạt động. Tôi đã thử Qt4Agg và đánh. Cảm ơn :) .. Điều cuối cùng, tôi có thể tìm matplotlibrc mặc định ở đâu hoặc có cách nào để tạo nó không?
Baskaya

Xin lỗi vì sự không đúng mực. Tôi nghĩ rằng tôi đã tìm thấy
Baskaya

8
Câu trả lời này đã cũ, cấu hình bây giờ phải có ~/.config/matplotlib/matplotlibrc(ít nhất là cho python 3). Tôi vừa gặp một vấn đề liên quan và tôi nghĩ rằng đó là do sử dụng matplotlib trong python 2.7, đã tạo một ~/.matplotlib/thư mục và ngăn python 3 đọc cấu hình ~/.config/matplotlib/. Xóa ~/.matplotlib/sửa lỗi cho tôi.
ness101

5
6 năm sau và vấn đề này vẫn tồn tại ... Bây giờ tôi nhớ tại sao tôi ghét Python: một vấn đề trên mỗi dòng mã.
pookie

70

Tôi gặp vấn đề chính xác tương tự trên Ubuntu 12.04, vì tôi đã cài đặt matplotlib (trong một virtualenv) bằng cách sử dụng

pip install matplotlib

Để rút ngắn câu chuyện dài, lời khuyên của tôi là: đừng cố cài đặt matplotlib bằng pip hoặc bằng tay; hãy để một trình quản lý gói thực sự (ví dụ apt-get / synaptic) cài đặt nó và tất cả các phụ thuộc của nó cho bạn.

Thật không may, các phụ trợ của matplotlib (phương pháp thay thế để thực sự hiển thị các lô của bạn) có tất cả các loại phụ thuộc mà pip sẽ không giải quyết. Thậm chí tệ hơn, nó thất bại âm thầm; có nghĩa là, pip install matplotlibxuất hiện để cài đặt matplotlib thành công. Nhưng khi bạn cố gắng sử dụng nó (ví dụ pyplot.show()), sẽ không có cửa sổ cốt truyện nào xuất hiện. Tôi đã thử tất cả các phụ trợ khác nhau mà mọi người trên web đề xuất (Qt4Agg, GTK, v.v.) và tất cả đều thất bại (ví dụ như khi tôi cố gắng nhập matplotlib.pyplot, tôi nhận được ImportErrorvì nó đang cố nhập một số phụ thuộc bị thiếu). Sau đó, tôi đã nghiên cứu cách cài đặt các phụ thuộc đó, nhưng nó chỉ khiến tôi muốn từ bỏ bằng cách sử dụng pip (trong virtualenv) như một giải pháp cài đặt khả thi cho bất kỳ gói nào có phụ thuộc gói không phải Python.

Toàn bộ trải nghiệm đã gửi cho tôi thu thập dữ liệu trở lại apt-get / synaptic (tức là trình quản lý gói Ubuntu) để cài đặt phần mềm như matplotlib. Điều đó đã làm việc hoàn hảo. Tất nhiên, điều đó có nghĩa là bạn chỉ có thể cài đặt vào các thư mục hệ thống của mình, không có tính tốt của virtualenv và bạn bị mắc kẹt với các phiên bản mà Ubuntu phân phối, có thể đi sau phiên bản hiện tại ...


2
Câu trả lời của bạn là BIT dài, bạn có thể cân nhắc rút ngắn cho OP.
theJollySin

5
Bạn đã thử --system-site-packagestùy chọn?
Tianyang Li

1
% Christopher Lee Vấn đề với các số liệu không hiển thị mà không có bất kỳ lỗi / khiếu nại nào khác là do phụ trợ mặc định khi bạn pip installagg. Tôi không chắc tại sao, nhưng bạn có thể thay đổi nó theo câu trả lời của unutbu. pipcó ưu điểm chính là cài đặt phiên bản cập nhật - aptcài đặt phiên bản lỗi thời. Đôi khi có sửa lỗi / tính năng mới mà bạn muốn / cần.
drevicko

2
Chỉ cần ngừng hoạt virtualenvđộng! Và tôi đã có thể cài đặt matplotlib 1.4 từ nguồn toàn hệ thống (trên Ubuntu), nhưng không phải dưới virtualenv.
osa

1
Và giải pháp nào cho những người trong chúng ta bị mắc kẹt trên các máy làm việc Windows không thể sử dụng apt-get?
ale19

33

% matplotlib nội tuyến

Đối với tôi làm việc với máy tính xách tay, thêm dòng trên trước khi cốt truyện hoạt động.


Tôi cần sử dụng %pylab inlinetrên máy tính xách tay của mình như được ghi chú bởi @Bhanu Pratap Singh
Reed Sandberg

10

Để tham khảo trong tương lai,

Tôi đã gặp vấn đề tương tự - pylab không hiển thị dưới ipython. Sự cố đã được khắc phục bằng cách thay đổi tệp cấu hình của ipython {ipython_config.py}. Trong tập tin cấu hình

c.InteractiveShellApp.pylab = 'auto'

Tôi đã thay đổi 'tự động' thành 'qt' và bây giờ tôi thấy biểu đồ


5
hoặc sử dụng "ipython --pylab = qt"
rút ra

Điều này sẽ hoạt động, nhưng đó chỉ là một giải pháp một phần: Nếu phụ trợ mặc định của bạn là agg, tôi sẽ không %pylab inlinelàm việc đó, cũng như các ô sẽ hiển thị khi bạn chạy tập lệnh trực tiếp, ví dụ : python myscript.py. câu trả lời của unutbu nên sửa nó ở khắp mọi nơi.
drevicko


8

Điều giải quyết vấn đề của tôi chỉ là sử dụng hai dòng dưới đây trong sổ ghi chép ipython ở trên cùng

%matplotib inline
%pylab inline

Va no đa hoạt động. Tôi đang sử dụng Ubuntu16.04 và ipython-5.1


Vui lòng sửa định dạng của các ý kiến ​​trên ... Cảm ơn.
Saras Arya

Xong - Mặc dù blogpost này làm hỏng pylab nhưng bạn sẽ có một ý tưởng tại sao việc thêm %pylab inlinelàm cho nó hoạt động.
Bhanu Pratap Singh

2

Tôi đã phải cài đặt matplotlib từ nguồn để làm việc này. Các hướng dẫn chính (từ http://www.pyimagesearch.com/2015/08/24/resolve-matplotlib-fftime-not-showing-up-or-displaying/ ) là:

$ workon plotting
$ pip uninstall matplotlib
$ git clone https://github.com/matplotlib/matplotlib.git
$ cd matplotlib
$ python setup.py install

Bằng cách thay đổi phụ trợ, như @unutbu nói, tôi vừa gặp phải nhiều vấn đề hơn với tất cả các phụ trợ khác nhau không hoạt động.


1
Làm việc một điều trị, chỉ sử dụng các bước thiết lập git clone và python nhưng khi tôi chạy nó với plt.show () không có vấn đề.
Steve

2

Thêm hai dòng sau trước khi nhập pylab dường như có hiệu quả với tôi

import matplotlib
matplotlib.use("gtk")

import sys
import pylab
import numpy as np

0

Đảm bảo bật tập lệnh khởi động này: (Tùy chọn> Bảng điều khiển> Tùy chọn nâng cao)

/usr/lib/python2.7/dist-packages/spyderlib/scientific_startup.py

Nếu PYTHONSTARTUP tiêu chuẩn được bật, bạn sẽ không có cốt truyện tương tác


0

Tương tự như @Rikki, tôi đã giải quyết vấn đề này bằng cách nâng cấp matplotlibvới pip install matplotlib --upgrade. Nếu bạn không thể nâng cấp gỡ cài đặt và cài đặt lại có thể hoạt động.

pip uninstall matplotlib
pip install matplotlib

0

Đối với tôi, vấn đề xảy ra nếu tôi chỉ cần tạo một tệp trống matplotlibrc trong ~/.matplotlibmacOS. Thêm "backend: macosx" trong nó sẽ khắc phục vấn đề.

Tôi nghĩ đó là một lỗi: nếu backendkhông được chỉ định trong tôi, matplotlibrcnó sẽ lấy giá trị mặc định.



0

Tôi thấy rằng tôi cần window = Tk()và sau đówindow.mainloop()


Bạn có thể thêm một chút giải thích? Giải pháp của bạn khác với những người khác như thế nào?
Ralf Stubner

-2

Đối với Ubuntu 12.04:

sudo apt-get install python-qt4
virtualenv .env --no-site-packages
source .env/bin/activate
easy_install -U distribute
ln -s /usr/lib/python2.7/dist-packages/PyQt4 .
ln -s /usr/lib/python2.7/dist-packages/sip.so .
pip install matplotlib
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.