Pycharm ไม่แสดงพล็อต


104

Pycharm ไม่แสดงพล็อตจากรหัสต่อไปนี้:

import pandas as pd
import numpy as np
import matplotlib as plt

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

ts = ts.cumsum()    
ts.plot()

สิ่งที่เกิดขึ้นคือหน้าต่างปรากฏขึ้นไม่ถึงหนึ่งวินาทีจากนั้นก็หายไปอีกครั้ง

การใช้ Pyzo IEP IDE (โดยใช้ล่ามเดียวกัน) บนโค้ดเดียวกันที่พล็อตจะแสดงตามที่คาดไว้

... ดังนั้นปัญหาต้องอยู่ที่การตั้งค่าบางอย่างใน Pycharm ฉันได้ลองใช้ทั้ง python.exe และ pythonw.exe เป็นล่ามทั้งสองได้ผลลัพธ์เหมือนกัน

นี่คือ sys_info ของฉัน:

C:\pyzo2014a\pythonw.exe -u C:\Program Files (x86)\JetBrains\PyCharm Community Edition 3.4.1\helpers\pydev\pydevconsole.py 57315 57316
PyDev console: using IPython 2.1.0import sys; print('Python %s on %s' % (sys.version, sys.platform))
Python 3.4.1 |Continuum Analytics, Inc.| (default, May 19 2014, 13:02:30) [MSC v.1600 64 bit (AMD64)] on win32
sys.path.extend(['C:\\Users\\Rasmus\\PycharmProjects\\untitled2'])
In[3]: import IPython
print(IPython.sys_info())
{'commit_hash': '681fd77',
 'commit_source': 'installation',
 'default_encoding': 'UTF-8',
 'ipython_path': 'C:\\pyzo2014a\\lib\\site-packages\\IPython',
 'ipython_version': '2.1.0',
 'os_name': 'nt',
 'platform': 'Windows-8-6.2.9200',
 'sys_executable': 'C:\\pyzo2014a\\pythonw.exe',
 'sys_platform': 'win32',
 'sys_version': '3.4.1 |Continuum Analytics, Inc.| (default, May 19 2014, '
                '13:02:30) [MSC v.1600 64 bit (AMD64)]'}

6
ไม่plt.pyplot.show()ทำงานหรือไม่
Padraic Cunningham

1
มันไม่ใช่. เมื่อเรียกใช้ 'plt.pyplot.show ()' อย่างตรงไปตรงมามันจะไม่ทำงาน ฉันควรเขียนอย่างอื่นแทน 'pyplot' หรือไม่? (noob ที่นี่).
Rasmus Larsen

จะเกิดอะไรขึ้นเมื่อคุณรันโค้ดใน pycharm
Padraic Cunningham

เมื่อฉันเรียกใช้ไฟล์สิ่งเดียวกันจะเกิดขึ้น: หน้าต่างปรากฏขึ้นอย่างรวดเร็วและหายไปการพิมพ์คอนโซล: กระบวนการเสร็จสิ้นด้วยรหัสออก 0 เมื่อฉันส่งไปที่คอนโซลหน้าต่างจะปรากฏขึ้นและยังคงอยู่ แต่ไม่มีอะไรวาดในหน้าต่างมันเป็นเพียงสีขาว ป้ายกำกับของหน้าต่างคือ "รูปที่ 1 (ไม่ตอบสนอง)"
Rasmus Larsen

คุณควรเพิ่ม matplotlib.pyplot เพื่อแสดงข้อมูลอ้างอิง: stackoverflow.com/a/29042575/4989929
Ronak Poriya

คำตอบ:


105

เพียงแค่ใช้

plt.show()

คำสั่งนี้บอกให้ระบบวาดพล็อตใน Pycharm

ตัวอย่าง:

plt.imshow(img.reshape((28, 28)))
plt.show()

4
มันน่าทึ่งมาก - สิ่งนี้ได้ผลสำหรับฉันและไม่มีคนอื่นทำ สิ่งที่น่าแปลกใจคือฉันไม่ต้องการ plt.show () ใน Jupyter Notebook แต่ทำไมพฤติกรรมถึงแตกต่างกันใน PyCharm
Ambareesh

เหมือนกันที่นี่ ฉันไม่ต้องการมันใน Jupyter Notebook
สงสาร

ฉันมักจะลืมเรียกสิ่งนั้นด้วย สิ่งนี้บอกให้ระบบวาดใน pycharm โน้ตบุ๊กจะเรียกใช้ฟังก์ชันวาดและพิมพ์อัตโนมัติตามค่าเริ่มต้น ฉันคิดว่ามันถูกสร้างขึ้นมาเพื่อการสร้างต้นแบบที่รวดเร็วขึ้น
MNM

จะเกิดอะไรขึ้นถ้าฉันต้องใช้plt.draw()ตั้งแต่ฉันอัปเดตรูปในภายหลัง plt.show()ใช้งานได้ดี แต่plt.draw()ไม่แสดงอะไรเลยใน PyCharm
CGFoX

1
%matplotlib inlineอาจเป็นได้ว่าคุณไม่จำเป็นต้องใช้ในโน๊ตบุ๊คเพราะคุณทำอะไรเช่นนี้ @CGFox วาดหมายถึงการแสดงผลไปยังหน่วยความจำอย่างชัดเจน แต่ไม่แสดงบนหน้าจอ (หรือไฟล์) คุณต้องใช้ plt.pause (0.1) เพื่อให้พล็อตแสดงหรือเรียก plt.show (pause = True) ที่จุดอื่นในโค้ดเพื่อให้แสดงผล
xaviersjs

54

ฉันรู้ว่านี่เป็นเรื่องเก่า แต่ฉันคิดว่าฉันจะล้างความเข้าใจผิดสำหรับนักท่องเที่ยวคนอื่น ๆ การตั้งค่าplt.pyplot.isinteractive()ที่จะFalseหมายความว่าพล็อตจะได้รับในการวาดบนคำสั่งเฉพาะการวาด (คือplt.pyplot.show()) การตั้งค่าplt.pyplot.isinteractive()ที่จะTrueหมายความว่าทุกpyplot( plt) คำสั่งจะเรียกคำสั่งวาด (คือplt.pyplot.show()) ดังนั้นสิ่งที่คุณต้องการมากกว่าที่จะมองหาคือplt.pyplot.show()ที่ส่วนท้ายของโปรแกรมของคุณเพื่อแสดงกราฟ

ตามบันทึกข้างคุณสามารถร่นงบการเงินนี้บิตโดยใช้คำสั่งดังต่อไปนี้นำเข้ามากกว่าimport matplotlib.pyplot as pltmatplotlib as plt


14
การเพิ่ม plt.show (block = True) ต่อท้ายฟังก์ชันของฉันคือสิ่งที่ใช้ได้ผลสำหรับฉัน ขอบคุณสำหรับคำชี้แจง (Python 3.x, PyCharm 2016.1.4, Ubuntu)
SummerEla

นี่คือสิ่งที่ใช้ได้ผลสำหรับฉัน (Python 2.7, Pycharm 2016.3, Ubuntu 16.04): "import matplotlib.pyplot as plt" แล้วพล็อตฟังก์ชันจาก DataFrame เช่นใน "corr_data [col] .plot (kind =" bar ", figsize = (8, 5), grid = True, color = "r", title = col) "และก่อนออกจากฟังก์ชัน" plt.show () "
Taka

34

ผมมีปัญหาเหมือนกัน. ตรวจสอบว่าplt.isinteractive()เป็นจริง การตั้งค่าเป็น "เท็จ" ช่วยฉันได้

plt.interactive(False)

9
การเรียกใช้ plt.show (block = True) ช่วยแสดงแผนภูมิหนึ่งครั้งให้ฉัน แต่คอนโซลถูกบล็อกแม้ว่าจะปิดหน้าต่างแผนภูมิแล้วก็ตาม
DanT

plt.interactive (False) ทำเพื่อฉันใน PyCharm
fantabolous

ฉันไม่ได้ติดตั้ง Python อีกต่อไปดังนั้นฉันจึงไม่รู้ว่ามันจะใช้ได้สำหรับฉันหรือไม่ แต่เนื่องจากมันใช้ได้กับคนอื่นฉันจึงจะยอมรับคำตอบนี้ (ฉันหวังว่านี่จะถูกต้องตามกฎของ stackoverflow)
Rasmus Larsen

8
วิธีแก้ไขที่ถูกต้องคือตั้งค่า plt.show (block = True) ตามที่ @charlie ได้แนะนำไว้ด้านล่าง หลังจากที่คุณเพิ่มบรรทัดนี้ค่าของแฟล็ก plt.interactive () จะไม่มีผลต่อพล็อตที่แสดง
แอบแฝงกัด

สิ่งนี้ใช้ไม่ได้สำหรับฉันสำหรับ cluster_id ในช่วง (len (tempx [0])): plt.plot (tempx, tempy, 'rx--', markersize = 8) plt.legend (loc = 4, framealpha = 0.5) plt.interactive (False) plt.show (block = True) `
Mona Jalal

29

ฉันพยายามแก้ปัญหาที่แตกต่างกัน plt.show(block=True)แต่สิ่งที่ทำงานที่สุดสำหรับฉันคือ คุณต้องเพิ่มคำสั่งนี้หลังจากmyDataFrame.plot()คำสั่งนี้จึงจะมีผล หากคุณมีหลายพล็อตเพียงแค่เพิ่มคำสั่งที่ส่วนท้ายของโค้ดของคุณ จะช่วยให้คุณเห็นทุกข้อมูลที่คุณกำลังวางแผน


2
สิ่งนี้ทำเพื่อฉัน ควรเป็นคำตอบที่ได้รับการยอมรับ การล้อเล่นกับ plt.interactive () ไม่ได้ทำอะไรเลย
อาการบวมเป็นน้ำเหลืองที่

ฉันเห็นด้วยเพราะสิ่งนี้ช่วยฉันด้วย การตั้งค่าโหมดโต้ตอบเป็น False และการเพิ่ม "DISPLAY = TRUE" ให้กับตัวแปรสภาพแวดล้อมไม่ได้ช่วยอะไร
whiletrue

22
import matplotlib
matplotlib.use('TkAgg')

ใช้ได้ผลสำหรับฉัน (PyCharm / OSX)


สิ่งนี้ใช้ได้ผลกับฉันใน Windows 10 เมื่อplt.show()ไม่ได้ช่วยอะไรอีกแล้วใน PyCharm เวอร์ชันใหม่กว่า (2020.1)
Corbie

15

ฉันทดสอบ Pycharm เวอร์ชันของฉัน (Community Edition 2017.2.2) คุณอาจต้องประกาศทั้ง plt.interactive (False) และ plt.show (block = True) ดังต่อไปนี้:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 6.28, 100)

plt.plot(x, x**0.5, label='square root')
plt.plot(x, np.sin(x), label='sinc')

plt.xlabel('x label')
plt.ylabel('y label')

plt.title("test plot")

plt.legend()

plt.show(block=True)
plt.interactive(False)

เสียใจเป็นอย่างยิ่ง. ฉันพบว่ามันใช้งานได้ใน Pycharm 2017.3 (ฉบับชุมชน) ด้วย คุณอาจลองใช้ Pycharm เวอร์ชันใหม่ได้ไหม
tairen

สวัสดีซาเรียขอโทษที่ ฉันทดสอบใน Pycharm 2018.1.2 (ฉบับชุมชน) ด้วย Ubuntu OS มันทำงานเกินไป
tairen

สวัสดีมันใช้งานได้กับ Pycharm 2019.3 กับ MacOs Catalina
Milad nourizade

13

ฉันได้พบวิธีแก้ปัญหาแล้ว สิ่งนี้ใช้ได้ผลสำหรับฉัน:

import numpy as np
import matplotlib.pyplot as plt

points = np.arange(-5, 5, 0.01)
dx, dy = np.meshgrid(points, points)
z = (np.sin(dx)+np.sin(dy))
plt.imshow(z)
plt.colorbar()
plt.title('plot for sin(x)+sin(y)')
plt.show()

แต่ตอนนี้ฉันกำลังเผชิญกับปัญหาใหม่ เมื่อสร้างพล็อตในหน้าต่างใหม่โค้ดใหม่ที่ฉันเพิ่มหลังจากพล็อตไม่ทำงานจนกว่าฉันจะปิดหน้าต่างที่เพิ่งเปิดใหม่
Dhruv

2
บรรทัดสำคัญที่ขาดหายไปในคำถามคือ plt.show ()
Yoav

6

ไม่นานหลังจากโทร

plt.imshow() 

โทร

plt.show(block = True)

คุณจะได้รับป๊อปอัพ matplotlib พร้อมรูปภาพ

นี่คือวิธีการปิดกั้น สคริปต์เพิ่มเติมจะไม่ทำงานจนกว่าป๊อปจะปิด


นี่คือสิ่งที่ฉันกำลังมองหา
NelsonGon

5

สำหรับฉันปัญหาคือความจริงที่ว่า matplotlib ใช้แบ็กเอนด์ที่ไม่ถูกต้อง ฉันใช้ Debian Jessie

ในคอนโซลฉันทำสิ่งต่อไปนี้:

import matplotlib
matplotlib.get_backend()

ผลลัพธ์คือ: 'agg' ในขณะที่ควรเป็น 'TkAgg'

วิธีแก้ปัญหานั้นง่ายมาก:

  1. ถอนการติดตั้ง matplotlib ผ่าน pip
  2. ติดตั้งไลบรารีที่เหมาะสม: sudo apt-get install tcl-dev tk-dev python-tk python3-tk
  3. ติดตั้ง matplotlib ผ่าน pip อีกครั้ง


4

ข้างต้นไม่ได้ผลสำหรับฉัน แต่สิ่งต่อไปนี้ทำ:

  1. ปิดการใช้งานช่องทำเครื่องหมาย (Show แปลงในหน้าต่างเครื่องมือ) ใน settings > Tools > Python Scientificpycharm

  2. No PyQt5 module foundผมได้รับข้อผิดพลาด ดำเนินการติดตั้งPyQt5โดยใช้:

    sudo apt-get install python3-pyqt5
    

ระวังว่าขั้นตอนแรกเพียงบางส่วนก็เพียงพอและใช้ได้ผล


1
โปรดทำให้ชัดเจนขึ้นว่าขั้นตอนแรกอาจเป็นทางแก้ปัญหาได้เหมือนเดิมสำหรับฉัน ระบุเช่นนี้คำตอบซ้ำ ๆ ของ @ amir1122 มีสิทธิ์ที่จะมีอยู่ ซึ่งก็ใช้ได้เช่นกันและคุณยังคงได้รับคะแนนโหวตเพิ่มขึ้น
Lorenz

1
@ ลอเรนซ์. อัปเดตตามข้อเสนอแนะของคุณซึ่งสมเหตุสมผล
AbdulRehmanLiaqat

ขั้นตอนที่ 1 ใช้งานได้ แต่ให้ความรู้สึกเหมือนเป็นวิธีแก้ปัญหา ฉันสงสัยในกรณีของฉันว่าเป็นเพราะฉันมี Python หลายเวอร์ชัน (3.6, 3.7 และ 3.8) ลอยอยู่รอบ ๆ
Josiah Yoder

3

ฉันทดสอบในเวอร์ชันของฉันบน PyCharm 2017.1.2 ฉันใช้แบบโต้ตอบ (True) และแสดง (block = True)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1//2000',periods=1000))
ts = ts.cumsum()
plt.interactive(True)
ts.plot()
plt.show(block=True)

2

env ของฉัน: macOS & anaconda3.0

สิ่งนี้ใช้ได้กับฉัน:

matplotlib.use('macosx')

หรือโหมดโต้ตอบ:

matplotlib.use('TkAgg')

เพิ่มสิ่งนี้ก่อนนำเข้า matplotlib.pyplot
Zoe L

2

ฉันมีปัญหานี้และฉันสามารถแก้ได้คุณสามารถทดสอบวิธีของฉัน .. ปิดการใช้งาน "แสดงพล็อตในหน้าต่างเครื่องมือ" จากการตั้งค่า -> เครื่องมือ -> หลามทางวิทยาศาสตร์


1
คำตอบนี้ได้ให้ไว้แล้วเมื่อสองปีก่อน (เช่นในstackoverflow.com/a/52221178/466862 ) เมื่อตอบคำถามเก่า ๆ ตรวจสอบให้แน่ใจว่าคุณได้ตอบคำถามใหม่วิธีแก้ปัญหาที่แตกต่างกันหรือคำอธิบายที่ดีกว่ามาก
Mark Rotteveel

นี่เป็นการทำซ้ำคำตอบของ @ AbdulRehmanLiaqat แต่อย่างน้อยก็ระบุชัดเจนว่านี่อาจเป็นทางออกที่เป็นไปได้ ครั้งแรกฉันลงคะแนนนี้เนื่องจากการทำซ้ำ ตอนนี้ฉันเพิ่มคะแนนเพียงเพราะคำตอบอื่นไม่ได้ระบุอย่างชัดเจนว่าขั้นตอนเดียวที่นี่สามารถแก้ไขได้แล้วแทนที่จะกล่าวถึงข้อผิดพลาดในภายหลังซึ่งไม่ปรากฏในกรณีของฉัน
Lorenz

1

ความคิดเห็นจาก DanT แก้ไขสิ่งนี้ให้ฉัน matplotlib พร้อม pycharm บน linux พร้อมแบ็กเอนด์ GTKagg เมื่อนำเข้า matplotlib ฉันจะได้รับข้อผิดพลาดต่อไปนี้:

>>> import matplotlib as mpl

Backend GTKAgg is interactive backend. Turning interactive mode on.
Failed to enable GUI event loop integration for 'gtk'

เมื่อวางแผนสิ่งต่างๆดังนี้:

from matplotlib import pyplot as plt
plt.figure()
plt.plot(1,2)
plt.show()

หน้าจอรูปจะปรากฏขึ้น แต่ไม่ปรากฏแผนภูมิ ใช้:

plt.show(block=True)

แสดงกราฟิกอย่างถูกต้อง


1

ในกรณีของฉันฉันต้องการทำสิ่งต่อไปนี้:

    plt.bar(range(len(predictors)), scores)
    plt.xticks(range(len(predictors)), predictors, rotation='vertical')
    plt.show()

จากการผสมผสานของโซลูชันที่นี่โซลูชันของฉันคือเพิ่มคำสั่งต่อไปนี้ก่อนหน้านั้น:

    matplotlib.get_backend()
    plt.interactive(False)
    plt.figure()

ด้วยการนำเข้าสองรายการต่อไปนี้

   import matplotlib
   import matplotlib.pyplot as plt

ดูเหมือนว่าคำสั่งทั้งหมดมีความจำเป็นในกรณีของฉันด้วย MBP กับ ElCapitan และ PyCharm 2016.2.3 ทักทาย!


1

สำหรับผู้เริ่มต้นคุณอาจต้องการตรวจสอบให้แน่ใจว่าคุณกำลังเรียกใช้สคริปต์ของคุณในคอนโซลไม่ใช่โค้ด Python ทั่วไป มันค่อนข้างง่ายที่จะเน้นชิ้นส่วนของรหัสและเรียกใช้



1

สำหรับผู้ที่ใช้งานสคริปต์ภายใน IDE (และไม่ได้ทำงานในสภาพแวดล้อมแบบโต้ตอบเช่นคอนโซลไพ ธ อนหรือโน้ตบุ๊ก) ฉันพบว่านี่เป็นวิธีที่ใช้งานง่ายที่สุดและเป็นวิธีแก้ปัญหาที่ง่ายที่สุด:

plt.imshow(img)
plt.waitforbuttonpress()

จะแสดงรูปและรอจนกว่าผู้ใช้จะคลิกที่หน้าต่างใหม่ จากนั้นก็เรียกใช้สคริปต์ต่อและเรียกใช้รหัสที่เหลือ


1

ฉันสามารถรับคำแนะนำอื่น ๆ รวมกันบางอย่างที่นี่ใช้ได้กับฉัน แต่ในขณะที่สลับplt.interactive(False)ไปTrueมาและกลับอีกครั้งเท่านั้น

plt.interactive(True)
plt.pyplot.show()

สิ่งนี้จะกระพริบพล็อตของฉัน จากนั้นตั้งค่าเป็นFalseอนุญาตให้ดู

plt.interactive(False)
plt.pyplot.show()

ตามที่ระบุไว้โปรแกรมของฉันจะไม่ออกจนกว่าหน้าต่างทั้งหมดจะถูกปิด นี่คือรายละเอียดบางส่วนเกี่ยวกับสภาพแวดล้อมการทำงานปัจจุบันของฉัน:

Python version 2.7.6
Anaconda 1.9.2 (x86_64)
(default, Jan 10 2014, 11:23:15) 
[GCC 4.0.1 (Apple Inc. build 5493)]
Pandas version: 0.13.1

0

ต้องตั้งค่าคุณสมบัติหนึ่งสำหรับ pycharm

import matplotlib.pyplot as plt

plt.interactive(False)  #need to set to False

dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)

plt.show()

0

เปลี่ยนการนำเข้าเป็น:

import matplotlib.pyplot as plt

หรือใช้บรรทัดนี้:

plt.pyplot.show()

0

ฉันใช้ Ubuntu และฉันลองตามที่ @Arie กล่าวไว้ข้างต้น แต่ด้วยบรรทัดนี้ในเทอร์มินัลเท่านั้น:

sudo apt-get install tcl-dev tk-dev python-tk python3-tk

และมันได้ผล!


0

ใน Pycharm บางครั้ง Matplotlib.plot จะไม่ปรากฏขึ้น

ดังนั้นหลังจากโทรplt.show()เช็คในแถบเครื่องมือด้านขวาสำหรับ SciView ภายใน SciView ทุกแปลงที่สร้างขึ้นจะถูกเก็บไว้


0

ฉันพบข้อผิดพลาดข้างต้นเมื่อฉันพยายามพล็อตฮิสโตแกรมและจุดด้านล่างได้ผลสำหรับฉัน

ระบบปฏิบัติการ: Mac Catalina 10.15.5

Pycharm เวอร์ชัน: เวอร์ชันชุมชน 2019.2.3

เวอร์ชัน Python: 3.7.2

  1. ฉันเปลี่ยนคำสั่งนำเข้าตามด้านล่าง (จาก - เป็น)

จาก:

import matplotlib.pylab as plt

ถึง:

import matplotlib.pyplot as plt

  1. และพล็อตคำสั่งด้านล่าง (เปลี่ยนรูปแบบคำสั่งของฉัน pyplot เป็น plt)

จาก:

plt.pyplot.hist(df["horsepower"])

# set x/y labels and plot title
plt.pyplot.xlabel("horsepower")
plt.pyplot.ylabel("count")
plt.pyplot.title("horsepower bins") 

ถึง :

plt.hist(df["horsepower"])

# set x/y labels and plot title
plt.xlabel("horsepower")
plt.ylabel("count")
plt.title("horsepower bins")
  1. ใช้ plt.show เพื่อแสดงฮิสโตแกรม

plt.show()

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