Pycharm tidak menunjukkan plot


100

Pycharm tidak menunjukkan plot dari kode berikut:

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()

Apa yang terjadi adalah sebuah jendela muncul kurang dari satu detik, dan kemudian menghilang lagi.

Menggunakan Pyzo IEP IDE (menggunakan interpreter yang sama) pada kode yang sama, plot ditampilkan seperti yang diharapkan.

... Jadi masalahnya pasti dengan beberapa pengaturan di Pycharm. Saya sudah mencoba menggunakan python.exe dan pythonw.exe sebagai interpreter keduanya dengan hasil yang sama.

Ini sys_info saya:

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
apakah plt.pyplot.show()bekerja?
Padraic Cunningham

1
Itu tidak. Saat menjalankan persis 'plt.pyplot.show ()' itu tidak berfungsi. Haruskah saya menulis sesuatu yang lain selain 'pyplot'? (noob di sini).
Rasmus Larsen

apa yang terjadi ketika Anda menjalankan kode di pycharm?
Padraic Cunningham

Ketika saya menjalankan file, hal yang sama terjadi: jendela muncul dengan cepat dan menghilang, pencetakan konsol: Proses selesai dengan kode keluar 0. Ketika saya mengirimnya ke konsol, jendela muncul dan tetap ada tetapi tidak ada yang ditarik di jendela, hanya putih. Label jendela adalah "Gambar 1 (Tidak Merespons)"
Rasmus Larsen

Anda harus menambahkan matplotlib.pyplot untuk memvisualisasikannya. Lihat: stackoverflow.com/a/29042575/4989929
Ronak Poriya

Jawaban:


103

Gunakan saja

plt.show()

Perintah ini memberi tahu sistem untuk menggambar plot di Pycharm.

Contoh:

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

4
Sungguh menakjubkan - ini berhasil untuk saya, dan tidak ada yang berhasil. Yang mengejutkan adalah, saya tidak perlu plt.show () di Jupyter Notebook, tidak tahu mengapa perilakunya berbeda di PyCharm
Ambareesh

sama disini. Saya tidak membutuhkannya di Jupyter Notebook
pooria

Saya selalu lupa menyebutnya juga. Ini memberitahu sistem untuk benar-benar menggambarnya di pycharm. Notebook akan secara otomatis memanggil fungsi menggambar dan mencetak secara default. Saya pikir itu dibuat seperti itu untuk pembuatan prototipe yang lebih cepat.
MNM

Bagaimana jika saya perlu menggunakan plt.draw()karena saya memperbarui gambar nanti? plt.show()berfungsi dengan baik, tetapi plt.draw()tidak menampilkan apa pun di PyCharm.
CGFoX

1
Bisa jadi Anda tidak membutuhkannya di notebook karena Anda melakukan hal seperti ini %matplotlib inline. @CGFox, gambar dimaksudkan secara eksplisit untuk merender ke memori tetapi tidak ditampilkan ke layar (atau file). Anda perlu melakukan plt.pause (0.1) untuk menampilkan plot, atau memanggil plt.show (pause = True) di beberapa titik lain dalam kode untuk membuatnya dirender
xaviersjs

54

Saya menyadari ini sudah tua tetapi saya pikir saya akan menjernihkan kesalahpahaman untuk pelancong lain. Pengaturan plt.pyplot.isinteractive()ke Falseberarti bahwa plot akan digambar pada perintah khusus untuk menggambar (yaitu plt.pyplot.show()). Menyetel plt.pyplot.isinteractive()ke Trueberarti bahwa setiap perintah pyplot( plt) akan memicu perintah gambar (yaitu plt.pyplot.show()). Jadi, yang Anda cari kemungkinan besar adalah plt.pyplot.show()di akhir program Anda untuk menampilkan grafik.

Sebagai catatan tambahan, Anda dapat sedikit mempersingkat pernyataan ini dengan menggunakan perintah import berikut import matplotlib.pyplot as pltdaripada matplotlib as plt.


14
Menambahkan plt.show (block = True) ke akhir fungsi saya adalah hal yang berhasil untuk saya. Terimakasih atas klarifikasinya. (Python 3.x, PyCharm 2016.1.4, Ubuntu)
SummerEla

Inilah yang berhasil untuk saya (Python 2.7, Pycharm 2016.3, Ubuntu 16.04): "import matplotlib.pyplot as plt", lalu plot fungsi dari DataFrame seperti di "corr_data [col] .plot (kind =" bar ", figsize = (8, 5), grid = True, color = "r", title = col) "dan sebelum meninggalkan fungsi," plt.show () "
Taka

34

Saya memiliki masalah yang sama. Periksa apakah plt.isinteractive()Benar. Menyetelnya ke 'False' membantu saya.

plt.interactive(False)

9
Memanggil plt.show (block = True) membantu menampilkan bagan sekali untuk saya. Tapi konsol itu diblokir bahkan setelah menutup jendela grafik.
DanT

plt.interactive (False) melakukannya untuk saya di PyCharm
fantabolous

Saya tidak menginstal Python lagi, jadi saya tidak tahu apakah itu akan berhasil untuk saya, tetapi karena ini berfungsi untuk orang lain, saya akan menerima jawaban ini (saya harap ini benar sesuai dengan aturan stackoverflow)
Rasmus Larsen

8
Solusi yang benar adalah menyetel plt.show (block = True) seperti yang disarankan @charlie di bawah ini. Setelah Anda menambahkan baris ini, nilai bendera plt.interactive () tidak ada hubungannya dengan plot yang ditampilkan.
radang dingin

Ini tidak berhasil untuk saya `untuk cluster_id dalam jangkauan (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

Saya mencoba solusi yang berbeda tetapi yang akhirnya berhasil untuk saya adalah plt.show(block=True). Anda perlu menambahkan perintah ini setelah myDataFrame.plot()perintah agar ini berlaku. Jika Anda memiliki banyak plot, cukup tambahkan perintah di akhir kode Anda. Ini akan memungkinkan Anda untuk melihat setiap data yang Anda plot.


2
Ini berhasil untuk saya. Harus menjadi jawaban yang diterima. Mengacaukan dengan plt.interactive () tidak melakukan apa pun
radang dingin

Saya setuju karena ini membantu saya juga. Menyetel mode interaktif ke False dan menambahkan "DISPLAY = TRUE" ke variabel lingkungan tidak membantu.
Fábio

22
import matplotlib
matplotlib.use('TkAgg')

Bekerja untuk saya. (PyCharm / OSX)


Ini juga berfungsi untuk saya di Windows 10 ketika plt.show()tidak membantu lagi di versi yang lebih baru dari PyCharm (2020.1).
Corbie

14

Saya menguji Pycharm versi saya (Community Edition 2017.2.2), Anda mungkin perlu mengumumkan plt.interactive (False) dan plt.show (block = True) sebagai berikut:

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)

turut sedih. Saya merasa ini juga berfungsi di Pycharm 2017.3 (edisi komunitas). Bolehkah Anda mencoba menggunakan Pycharm versi baru?
tairen

Hai, Saria, maaf untuk itu. Saya mengujinya di Pycharm 2018.1.2 (edisi komunitas) saya dengan OS Ubuntu. Ini bekerja juga.
tairen

Hai, ini berfungsi untuk Pycharm 2019.3 dengan MacOs Catalina
Milad nourizade

13

Saya telah menemukan solusi. Ini berhasil untuk saya:

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()

Tapi saya sekarang menghadapi masalah baru. Setelah plot dibuat di jendela baru, kode baru yang saya tambahkan setelah plot tidak berjalan, sampai saya menutup jendela yang baru dibuka.
Dhruv

2
Baris penting yang hilang dalam pertanyaan adalah plt.show ()
Yoav

6

Segera setelah menelepon

plt.imshow() 

panggilan

plt.show(block = True)

Anda akan mendapatkan popup matplotlib dengan gambar.

Ini adalah cara memblokir. Skrip selanjutnya tidak akan berjalan sampai pop ditutup.


Inilah yang saya cari.
NelsonGon

5

Bagi saya masalahnya adalah fakta bahwa matplotlib menggunakan backend yang salah. Saya menggunakan Debian Jessie.

Di konsol saya melakukan hal berikut:

import matplotlib
matplotlib.get_backend()

Hasilnya adalah: 'agg', sedangkan ini seharusnya menjadi 'TkAgg'.

Solusinya sederhana:

  1. Copot pemasangan matplotlib melalui pip
  2. Instal pustaka yang sesuai: sudo apt-get install tcl-dev tk-dev python-tk python3-tk
  3. Instal matplotlib melalui pip lagi.

5

Tambahkan saja plt.pyplot.show(), itu akan baik-baik saja.

Solusi terbaik adalah menonaktifkan SciView.


4

Saya menguji dalam versi saya di PyCharm 2017.1.2. Saya menggunakan interactive (True) dan show (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)

4

Tak satu pun di atas berhasil untuk saya, tetapi yang berikut berhasil:

  1. Nonaktifkan kotak centang (Tampilkan plot di jendela alat) di pycharm settings > Tools > Python Scientific.

  2. Saya menerima kesalahan No PyQt5 module found. Lanjutkan dengan instalasi PyQt5menggunakan:

    sudo apt-get install python3-pyqt5

Berhati-hatilah karena untuk beberapa langkah pertama saja sudah cukup dan berhasil.


1
Tolong perjelas bahwa langkah pertama masih bisa menjadi solusi, karena itu berhasil untuk saya. Dinyatakan seperti ini, jawaban berulang lainnya dari @ amir1122 berhak untuk tetap ada. Tidak apa-apa tentu saja, dan Anda masih mendapatkan suara positif saya.
Lorenz

1
@Bayu_joo Diperbarui sesuai dengan saran Anda yang masuk akal.
AbdulRehmanLiaqat

Langkah 1 berhasil, tetapi terasa seperti solusi. Saya menduga dalam kasus saya bahwa itu karena saya memiliki banyak versi Python (3.6, 3.7, dan 3.8) yang beredar.
Josiah Yoder

2

Env saya: macOS & anaconda3

Ini bekerja untuk saya:

matplotlib.use('macosx')

atau mode interaktif:

matplotlib.use('TkAgg')

Tambahkan ini sebelum mengimpor matplotlib.pyplot
Zoe L

2

saya punya masalah ini dan saya bisa mengatasinya, Anda bisa menguji cara saya .. nonaktifkan "tampilkan plot di jendela alat" dari pengaturan -> alat -> python ilmiah


1
Jawaban ini sudah diberikan dua tahun lalu (mis. Di stackoverflow.com/a/52221178/466862 ). Saat menjawab pertanyaan lama, pastikan Anda menjawab solusi baru yang berbeda, atau penjelasan yang jauh lebih baik.
Mark Rotteveel

Ini mengulangi jawaban @ AbdulRehmanLiaqat, tetapi setidaknya dengan jelas menyatakan bahwa ini bisa menjadi solusi yang memungkinkan. Saya pertama kali tidak menyukai ini karena pengulangan. Sekarang saya memberi suara positif, hanya karena jawaban lain tidak menyatakan dengan jelas bahwa satu langkah di sini sudah dapat menyelesaikannya, melainkan menyebutkan kesalahan setelahnya yang tidak muncul dalam kasus saya.
Lorenz

1

Komentar dari DanT memperbaiki ini untuk saya, matplotlib dengan pycharm di linux dengan backend GTKagg. Setelah mengimpor matplotlib saya akan mendapatkan kesalahan berikut:

>>> import matplotlib as mpl

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

Saat merencanakan sesuatu seperti ini:

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

Layar gambar akan muncul tetapi tidak ada grafik yang muncul. menggunakan:

plt.show(block=True)

menampilkan grafik dengan benar.


1

Dalam kasus saya, saya ingin melakukan hal berikut:

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

Mengikuti campuran solusi di sini, solusi saya adalah menambahkan sebelumnya perintah berikut:

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

dengan dua impor berikut

   import matplotlib
   import matplotlib.pyplot as plt

Tampaknya semua perintah diperlukan dalam kasus saya, dengan MBP dengan ElCapitan dan PyCharm 2016.2.3. Salam pembuka!



1

Di env non-interaktif, kita harus menggunakan plt.show (block = True)


1

Bagi mereka yang menjalankan skrip di dalam IDE (dan tidak bekerja di lingkungan interaktif seperti konsol python atau notebook), saya menemukan ini sebagai solusi yang paling intuitif dan paling sederhana:

plt.imshow(img)
plt.waitforbuttonpress()

Ini menunjukkan gambar dan menunggu sampai pengguna mengklik pada jendela baru. Baru setelah itu melanjutkan skrip dan menjalankan sisa kode.


1

Saya bisa mendapatkan kombinasi dari beberapa saran lain di sini yang berfungsi untuk saya, tetapi hanya saat beralih plt.interactive(False)ke Truedan kembali lagi.

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

Ini akan mem-flash plot saya. Kemudian pengaturan menjadi Falsediperbolehkan untuk melihat.

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

Sebagaimana dicatat juga program saya tidak akan keluar sampai semua jendela ditutup. Berikut beberapa detail tentang lingkungan yang saya jalankan saat ini:

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

Satu properti perlu disetel untuk 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

Ubah impor menjadi:

import matplotlib.pyplot as plt

atau gunakan baris ini:

plt.pyplot.show()

0

Saya menggunakan Ubuntu dan saya mencoba seperti yang dikatakan @Arie di atas tetapi dengan baris ini hanya di terminal:

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

Dan itu berhasil!


0

Di Pycharm, terkadang Matplotlib.plot tidak muncul.

Jadi setelah memanggil plt.show()periksa di bilah alat sisi kanan untuk SciView. Di dalam SciView, setiap plot yang dihasilkan akan disimpan.


0

Saya menghadapi kesalahan di atas ketika saya mencoba merencanakan histogram dan poin di bawah berfungsi untuk saya.

OS: Mac Catalina 10.15.5

Versi Pycharm: Versi komunitas 2019.2.3

Versi Python: 3.7.0

  1. Saya mengubah pernyataan impor seperti di bawah ini (dari - menjadi)

dari:

import matplotlib.pylab as plt

untuk:

import matplotlib.pyplot as plt

  1. dan pernyataan plot ke bawah (mengubah bentuk perintah saya pyplot menjadi plt)

dari:

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") 

kepada:

plt.hist(df["horsepower"])

# set x/y labels and plot title
plt.xlabel("horsepower")
plt.ylabel("count")
plt.title("horsepower bins")
  1. gunakan plt.show untuk menampilkan histogram

plt.show()

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.