Saya menjalankan skrip python sederhana di server:
import matplotlib.pyplot as plt
import numpy as np
x = np.random.randn(60)
y = np.random.randn(60)
plt.scatter(x, y, s=20)
out_png = 'path/to/store/out_file.png'
plt.savefig(out_png, dpi=150)
Saya mencoba menggunakan perintah python example.py
di server ini yang telah menginstal matplotlib 1.5.1 gagal dengan kesalahan:
Traceback (most recent call last):
File "example.py", line 7, in <module>
plt.scatter(x, y, s=20)
File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/pyplot.py", line 3241, in scatter
ax = gca()
File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/pyplot.py", line 928, in gca
return gcf().gca(**kwargs)
File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/pyplot.py", line 578, in gcf
return figure()
File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/pyplot.py", line 527, in figure
**kwargs)
File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/backends/backend_tkagg.py", line 84, in new_figure_manager
return new_figure_manager_given_figure(num, figure)
File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/backends/backend_tkagg.py", line 92, in new_figure_manager_given_figure
window = Tk.Tk()
File "/usr/local/lib/python2.7/lib-tk/Tkinter.py", line 1810, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
Apa yang terjadi disini?
python
matplotlib
tkinter
pengguna3654307
sumber
sumber
-X
?%matplotlib inline
Jawaban:
Matplotlib memilih Xwindows backend secara default. Anda perlu mengatur matplotlib untuk tidak menggunakan backend Xwindows.
Tambahkan kode ini ke awal skrip Anda ( sebelum mengimpor pyplot ) dan coba lagi:
Atau tambahkan ke
.config/matplotlib/matplotlibrc
barisbackend: Agg
untuk menggunakan backend non-interaktif.Atau ketika terhubung ke server gunakan
ssh -X remoteMachine
perintah untuk menggunakan Xwindows.Juga Anda dapat mencoba untuk mengekspor tampilan:
export DISPLAY=mymachine.com:0.0
.Untuk info lebih lanjut: https://matplotlib.org/faq/howto_faq.html#matplotlib-in-a-web-application-server
sumber
matplotlib.use('Agg')
bekerja untuk saya - berjalan di dalam gambar Docker.Anda dapat menyelesaikannya dengan menambahkan dua baris ini di awal SANGAT skrip .py Anda.
PS: Kesalahan akan tetap ada jika dua baris ini tidak ditambahkan di awal kode sumber.
sumber
matplotlib
pada buruh pelabuhan (tidak ada tampilan terpasang), tetapi apa fungsinya sebenarnya?Untuk menambahkan jawaban, saya menggunakan ini di awal skrip yang diperlukan. Jadi itu berjalan dengan lancar di lingkungan yang berbeda.
Karena saya tidak ingin itu selalu menggunakan
'Agg'
backend, hanya ketika itu akan melalui Travis CI misalnya.sumber
Saya memiliki masalah yang sama mencoba menjalankan aplikasi tkinter sederhana jarak jauh pada Raspberry Pi. Dalam kasus saya, saya memang ingin menampilkan GUI tkinter pada layar pi, tetapi saya ingin dapat mengeksekusinya melalui SSH dari mesin host saya. Saya juga tidak menggunakan matplotlib, jadi itu bukan penyebab masalah saya. Saya dapat menyelesaikan masalah ini dengan mengatur variabel lingkungan DISPLAY seperti yang disarankan oleh perintah:
Penjelasan yang baik tentang apa yang dilakukan variabel lingkungan tampilan dan mengapa sintaksnya sangat aneh dapat ditemukan di sini: /ubuntu/432255/what-is-display-environment-variable
sumber
Solusi lain adalah menginstal Xvfb, dan ekspor tampilan Anda ke sana. yaitu:
Kemudian
$ export DISPLAY =: 8
$ ./example.py
sumber
Saya juga menemui masalah ini saat menggunakan Xshell untuk menghubungkan server Linux.
Setelah mencari metode, saya menemukan Xming + Xshell untuk memecahkan masalah imshow gambar dengan matplotlib.
Jika solusi yang dihapus tidak dapat menyelesaikan masalah Anda, coba unduh Xming dalam kondisi Anda menggunakan Xshell. Kemudian atur atribut dalam Xshell, SSH-> tunnel-> X11transfer-> pilih X DISPLAY localhost: 0,0
sumber
Untuk melihat gambar, plot, dan apa pun yang ditampilkan di windows pada mesin jarak jauh Anda, Anda perlu menghubungkannya seperti ini:
Dengan begitu Anda mengaktifkan akses ke server X. Server X adalah program dalam Sistem X Window yang berjalan pada mesin lokal (yaitu, komputer yang digunakan langsung oleh pengguna) dan menangani semua akses ke kartu grafis, layar tampilan dan perangkat input (biasanya keyboard dan mouse) pada komputer tersebut .
Info lebih lanjut di sini .
sumber