Saya mencoba menggunakan networkx dengan Python. Ketika saya menjalankan program ini ia mendapatkan kesalahan ini. Apakah ada yang hilang?
#!/usr/bin/env python
import networkx as nx
import matplotlib
import matplotlib.pyplot
import matplotlib.pyplot as plt
G=nx.Graph()
G.add_node(1)
G.add_nodes_from([2,3,4,5,6,7,8,9,10])
#nx.draw_graphviz(G)
#nx_write_dot(G, 'node.png')
nx.draw(G)
plt.savefig("/var/www/node.png")
Traceback (most recent call last):
File "graph.py", line 13, in <module>
nx.draw(G)
File "/usr/lib/pymodules/python2.5/networkx/drawing/nx_pylab.py", line 124, in draw
cf=pylab.gcf()
File "/usr/lib/pymodules/python2.5/matplotlib/pyplot.py", line 276, in gcf
return figure()
File "/usr/lib/pymodules/python2.5/matplotlib/pyplot.py", line 254, in figure
**kwargs)
File "/usr/lib/pymodules/python2.5/matplotlib/backends/backend_tkagg.py", line 90, in new_figure_manager
window = Tk.Tk()
File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 1650, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
Saya mendapatkan kesalahan yang berbeda sekarang:
#!/usr/bin/env python
import networkx as nx
import matplotlib
import matplotlib.pyplot
import matplotlib.pyplot as plt
matplotlib.use('Agg')
G=nx.Graph()
G.add_node(1)
G.add_nodes_from([2,3,4,5,6,7,8,9,10])
#nx.draw_graphviz(G)
#nx_write_dot(G, 'node.png')
nx.draw(G)
plt.savefig("/var/www/node.png")
/usr/lib/pymodules/python2.5/matplotlib/__init__.py:835: UserWarning: This call to matplotlib.use() has no effect
because the the backend has already been chosen;
matplotlib.use() must be called *before* pylab, matplotlib.pyplot,
or matplotlib.backends is imported for the first time.
if warn: warnings.warn(_use_error_msg)
Traceback (most recent call last):
File "graph.py", line 15, in <module>
nx.draw(G)
File "/usr/lib/python2.5/site-packages/networkx-1.2.dev-py2.5.egg/networkx/drawing/nx_pylab.py", line 124, in draw
cf=pylab.gcf()
File "/usr/lib/pymodules/python2.5/matplotlib/pyplot.py", line 276, in gcf
return figure()
File "/usr/lib/pymodules/python2.5/matplotlib/pyplot.py", line 254, in figure
**kwargs)
File "/usr/lib/pymodules/python2.5/matplotlib/backends/backend_tkagg.py", line 90, in new_figure_manager
window = Tk.Tk()
File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 1650, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
Saya mendapatkan kesalahan yang berbeda sekarang:
#!/usr/bin/env python
import networkx as nx
import matplotlib
import matplotlib.pyplot
import matplotlib.pyplot as plt
matplotlib.use('Agg')
G=nx.Graph()
G.add_node(1)
G.add_nodes_from([2,3,4,5,6,7,8,9,10])
#nx.draw_graphviz(G)
#nx_write_dot(G, 'node.png')
nx.draw(G)
plt.savefig("/var/www/node.png")
/usr/lib/pymodules/python2.5/matplotlib/__init__.py:835: UserWarning: This call to matplotlib.use() has no effect
because the the backend has already been chosen;
matplotlib.use() must be called *before* pylab, matplotlib.pyplot,
or matplotlib.backends is imported for the first time.
if warn: warnings.warn(_use_error_msg)
Traceback (most recent call last):
File "graph.py", line 15, in <module>
nx.draw(G)
File "/usr/lib/python2.5/site-packages/networkx-1.2.dev-py2.5.egg/networkx/drawing/nx_pylab.py", line 124, in draw
cf=pylab.gcf()
File "/usr/lib/pymodules/python2.5/matplotlib/pyplot.py", line 276, in gcf
return figure()
File "/usr/lib/pymodules/python2.5/matplotlib/pyplot.py", line 254, in figure
**kwargs)
File "/usr/lib/pymodules/python2.5/matplotlib/backends/backend_tkagg.py", line 90, in new_figure_manager
window = Tk.Tk()
File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 1650, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
python
matplotlib
graph
krisdigitx
sumber
sumber
Jawaban:
Masalah utama adalah bahwa (pada sistem Anda) matplotlib memilih backend x-using secara default. Saya baru saja mengalami masalah yang sama pada salah satu server saya. Solusi bagi saya adalah menambahkan kode berikut di tempat yang dapat dibaca sebelum impor pylab / matplotlib / pyplot lainnya :
Alternatifnya adalah mengaturnya di .matplotlibrc Anda
sumber
backend: agg
di~/.config/matplotlib'/matplotlibrc
(sebagai contoh, lihat http: //matplotlib.org/faq/troubleshooting_faq.html#locating-matplotlib-config-dir). Lihat juga matplotlib.org/users/customizing.html , yang memiliki contoh file konfigurasi di bagian bawah halaman. Temukan "agg" di halaman itu dan Anda akan melihat opsi konfigurasi yang Anda butuhkan.Sama seperti pelengkap dari jawaban Reinout.
Cara permanen untuk memecahkan masalah semacam ini adalah dengan mengedit file .matplotlibrc. Temukan via
Kemudian modifikasi backend di file itu menjadi
backend : Agg
. Hanya itu saja.sumber
$MATPLOTLIBRC
ke direktori tempat Anda ingin memasukkan matplotlibrc Anda sendiri.Jawaban bersihnya adalah mengambil sedikit waktu dengan benar mempersiapkan lingkungan eksekusi Anda.
Teknik pertama yang harus Anda persiapkan untuk lingkungan eksekusi Anda adalah dengan menggunakan
matplotlibrc
file, seperti yang direkomendasikan oleh Chris Q. , pengaturandalam file itu. Anda bahkan dapat mengontrol - tanpa perubahan kode - bagaimana dan di mana matplotlib mencari dan menemukan
matplotlibrc
file .Teknik kedua yang harus Anda persiapkan untuk lingkungan eksekusi Anda adalah dengan menggunakan
MPLBACKEND
variabel lingkungan (dan beri tahu pengguna Anda untuk menggunakannya):Ini berguna karena Anda bahkan tidak perlu menyediakan file lain pada disk untuk membuatnya berfungsi. Saya telah menggunakan pendekatan ini dengan, misalnya, pengujian dalam integrasi berkelanjutan, dan berjalan pada mesin jarak jauh yang tidak memiliki tampilan.
Hard-coding backend matplotlib Anda ke "Agg" dalam kode Python Anda seperti bashing pasak persegi ke dalam lubang bundar dengan palu besar, ketika, sebaliknya, Anda bisa saja mengatakan matplotlib itu perlu lubang persegi.
sumber
Saya mendapat kesalahan saat menggunakan matplotlib melalui Spark.
matplotlib.use('Agg')
tidak bekerja untuk saya. Pada akhirnya, kode berikut ini berfungsi untuk saya. Lebih lanjut di sinisumber
Saya hanya akan mengulangi apa yang dikatakan @Ivo Bosticky yang bisa diabaikan. Masukan garis-garis ini di sangat mulai dari file py.
Atau seseorang akan mendapatkan kesalahan
Ini akan menyelesaikan semua masalah Tampilan
sumber
Saya menemukan potongan ini berfungsi dengan baik ketika beralih antara lingkungan X dan tidak-X.
sumber
Saat masuk ke server untuk menjalankan kode, gunakan ini sebagai gantinya:
itu
-X
akan menghilangkan nama tampilan dan tidak ada kesalahan variabel lingkungan $ DISPLAY:)
sumber
-o ServerAliveCountMax=120 -o ServerAliveInterval=30
yang akan membuat klien ssh mengirim paket kosong setiap 30 detik selama maksimal 1 jam.Sistem apa yang Anda pakai? Sepertinya Anda memiliki sistem dengan X11, tetapi variabel lingkungan DISPLAY tidak diatur dengan benar. Coba jalankan perintah berikut dan jalankan kembali program Anda:
sumber
Ini bekerja untuk saya.
sumber
Satu hal lagi yang perlu diperiksa adalah apakah pengguna Anda saat ini berwenang untuk terhubung ke layar X. Dalam kasus saya, root tidak diizinkan untuk melakukan itu dan matplotlib mengeluh dengan kesalahan yang sama.
sumber:
http://www.debian-administration.org/articles/494https://debian-administration.org/article/494/Getting_X11_forwarding_through_ssh_working_after_running_susumber
Untuk memastikan kode Anda portabel di Windows, Linux dan OSX dan untuk sistem dengan dan tanpa tampilan, saya sarankan cuplikan berikut:
Kredit: https://stackoverflow.com/a/45756291/207661
sumber
Untuk Mesin Pembelajaran Mesin Google Cloud:
Dan kemudian untuk mencetak ke file:
dan untuk membuat PDF:
sumber