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)]'}
Rasmus Larsen
sumber
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()
Amit Lohan
sumber
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.

pengguna3915686
sumber
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)
DanT
sumber
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.

Charlie Armstrong
sumber
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)

Joe Bobson
sumber
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)
tairen
sumber
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()
Dhruv
sumber
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.

Sudeep K Rana
sumber
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.
Arie
sumber
5

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

Solusi terbaik adalah menonaktifkan SciView.

Taki Guan
sumber
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)
m4ndy
sumber
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.

AbdulRehmanLiaqat
sumber
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')
Zoe L.
sumber
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

amir1122
sumber
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.

Bastiaan
sumber
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!

Marc Torrellas
sumber
1

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

tkr_in
sumber
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.

Azim
sumber
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
Nathan W.
sumber
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()
Nilesh Shinde
sumber
0

Ubah impor menjadi:

import matplotlib.pyplot as plt

atau gunakan baris ini:

plt.pyplot.show()
Mise
sumber
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!

Farouk Fadly
sumber
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.

DAVIS BENNY 15MIS0426
sumber
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()

Tapan Hegde
sumber