ไม่มีหน้าต่างพล็อตใน matplotlib


92

ฉันเพิ่งติดตั้ง matplotlib ใน Ubuntu 9.10 โดยใช้ระบบแพ็คเกจ synaptic อย่างไรก็ตามเมื่อฉันลองใช้ตัวอย่างง่ายๆต่อไปนี้

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

ฉันไม่มีหน้าต่างพล็อต มีแนวคิดในการแสดงหน้าต่างพล็อตอย่างไร


8
pylab ไม่แสดงพล็อตตามค่าเริ่มต้นเนื่องจากการวาดและการอัปเดตอย่างต่อเนื่องอาจมีราคาแพง show()คุณจำเป็นต้องทำอย่างชัดเจน
Alok Singhal

1
เอกสารอย่างเป็นทางการบางส่วนเกี่ยวกับปัญหานี้: matplotlib.org/faq/…
stephenbez

คำตอบ:



38

pylab.show() ใช้งานได้ แต่บล็อก (คุณต้องปิดหน้าต่าง)

วิธีแก้ปัญหาที่สะดวกกว่ามากคือการทำpylab.ion()(เปิดโหมดโต้ตอบ) เมื่อคุณเริ่ม: pyplot.*คำสั่งทั้งหมด (เทียบเท่า pylab ของ) จะแสดงพล็อตทันที ข้อมูลเพิ่มเติมเกี่ยวกับโหมดโต้ตอบสามารถพบได้ในเว็บไซต์ทางการ

ฉันยังใช้สิ่งที่สะดวกยิ่งขึ้นเป็นครั้งที่สองipython -pylab( --pylabในเวอร์ชันที่ใหม่กว่า) ซึ่งช่วยให้คุณสามารถข้ามfrom … import …ส่วน (ใช้%pylabงานได้เช่นกันในเวอร์ชัน IPython ที่ใหม่กว่า)


1
แต่คุณต้องโทรpylab.show()ก่อนเพื่อเปิดร่าง
Steve Tjoa

3
@ สตีฟ: ประสบการณ์ของฉันคือสิ่งนี้ขึ้นอยู่กับแบ็กเอนด์อย่างมาก ใน Mac OS X ที่มี Python shell ปกติฉันไม่ต้องแสดง () (หรือวาด () สำหรับเรื่องนั้น): plot () จะเปิดหน้าต่างใหม่
Eric O Lebigot

1
อ่าโอเค. จุดดี. ฉันมีประสบการณ์กับ ipython ใน Linux เท่านั้น
Steve Tjoa

draw () ใช้ไม่ได้สำหรับฉัน แต่ pylab.ion () ใช้งานได้ ฉันใช้
OSx

สิ่งเดียวกันที่นี่ใน Python shell กับ Matplotlib ล่าสุด ฉันอัปเดตคำตอบของฉันขอบคุณ
Eric O Lebigot


11

ข้อมูลโค้ดด้านล่างใช้ได้กับทั้ง Eclipse และ 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()

เนื่องจากคำตอบอื่น ๆ หลายคำชี้แจงสิ่งนี้อาจใช้ได้ผลสำหรับคุณในขณะนี้ แต่ทั้งหมดขึ้นอยู่กับวิธีกำหนดค่าแบ็กเอนด์ matplotlib ของคุณ
nealmcb

9

มีข้อผิดพลาดเกิดขึ้นหรือไม่? ปัญหานี้อาจเกิดจากการไม่ได้ตั้งค่าแบ็กเอนด์ คุณสามารถตั้งค่าได้จากล่าม Python หรือจากไฟล์ config ( .matplotlib/matplotlibrc) ในโฮมไดเร็กทอรีของคุณ

ในการตั้งค่าแบ็กเอนด์ในโค้ดคุณสามารถทำได้

import matplotlib
matplotlib.use('Agg')

โดยที่ "Agg" คือชื่อของแบ็กเอนด์ แบ็กเอนด์ใดที่ปรากฏขึ้นอยู่กับการติดตั้งและระบบปฏิบัติการของคุณ

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

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


1
ใช้งานได้จริงขอบคุณ ต้องมีความชัดเจนในสิ่งที่ง่ายที่สุดที่จะทำ (เมื่อคุณรู้ไหมนี้คือการทำงานของหลักสูตร) คือการตั้งค่าแบ็กเอนด์ของคุณในการที่จะ.matplotlib/matplotlibrc backend: Aggถ้าอย่างนั้นคุณไม่จำเป็นต้องพูดอย่างชัดเจนuseทุกครั้ง :)
dsummersl

2

Modern IPython ใช้--matplotlibอาร์กิวเมนต์ "" กับพารามิเตอร์แบ็กเอนด์ที่เป็นทางเลือก ค่าเริ่มต้นเป็น "อัตโนมัติ" ซึ่งโดยปกติจะดีพอสำหรับ Mac และ Windows ฉันไม่ได้ทดสอบบน Ubuntu หรือการแจกจ่าย Linux อื่น ๆ แต่ฉันคาดหวังว่ามันจะใช้งานได้

ipython --matplotlib

0

หากคุณพบปัญหาในการpylab.show()ค้างหน้าต่าง IPython (อาจเป็นเฉพาะ Mac OS X ไม่แน่ใจ) คุณสามารถ cmd-c ในหน้าต่าง IPython สลับไปที่หน้าต่างพล็อตและมันจะแตกออก

เห็นได้ชัดว่าการโทรไปหาในอนาคตpylab.show()จะไม่หยุดหน้าต่าง IPython เฉพาะการโทรครั้งแรก น่าเสียดายที่ฉันพบว่าพฤติกรรมของหน้าต่างพล็อต / การโต้ตอบกับ show () เปลี่ยนไปทุกครั้งที่ฉันติดตั้ง matplotlib ใหม่ดังนั้นวิธีนี้อาจไม่ได้รับการแก้ไขเสมอไป


0

หากคุณเริ่มต้น IPython ด้วย--pylabตัวเลือกคุณไม่จำเป็นต้องโทรshow()หรือdraw(). ลองสิ่งนี้:

ipython  --pylab=inline

0

--pylabไม่ทำงานสำหรับJupyterแต่โชคดีที่เราสามารถเพิ่มการปรับแต่งในipython_config.pyไฟล์ที่จะได้รับทั้งสองpylabเช่นเดียวกับ autoreloadฟังก์ชันการทำงาน

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

0

หากคุณเป็นผู้ใช้ Anaconda และ Spyder ทางออกที่ดีที่สุดสำหรับคุณคือ:

เครื่องมือ -> การตั้งค่า -> คอนโซล Ipython -> ส่วนกราฟิก

จากนั้นในส่วนSupport for graphics (Matplotlib) :

เลือกสองตัวเลือกที่ใช้ได้

และในกราฟิกแบ็กเอนด์ :

เลือกอัตโนมัติ


-5

ความเป็นไปได้อีกประการหนึ่งเมื่อใช้ easy_install คือคุณต้องใช้ matplotlib เวอร์ชันล่าสุด ลอง:

import pkg_resources
pkg_resources.require("matplotlib")

ก่อนที่คุณจะนำเข้า matplotlib หรือโมดูลใด ๆ


2
เพียงเท่านี้ก็ทำให้แน่ใจว่าmatplotlibติดตั้งแล้วไม่ส่งผลกระทบต่อการจัดการหน้าต่าง
tacaswell
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.