libreria instalar graficar coordenadas python matplotlib graph

instalar - plot python 3



Generando un PNG con matplotlib cuando DISPLAY no está definido (11)

Estoy tratando de usar networkx con Python. Cuando ejecuto este programa me sale este error. ¿Hay algo que falta?

#!/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

Me sale un error diferente ahora:

#!/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

Me sale un error diferente ahora:

#!/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


¿En qué sistema estás? Parece que tienes un sistema con X11, pero la variable de entorno DISPLAY no se configuró correctamente. Intente ejecutar el siguiente comando y luego vuelva a ejecutar su programa:

export DISPLAY=localhost:0


Cuando inicie sesión en el servidor para ejecutar el código, use esto en su lugar:

ssh -X username@servername

el -X eliminará el nombre de no mostrar y no el error de variable de entorno $ DISPLAY

:)


El problema principal es que (en su sistema) matplotlib elige un backend que usa x de forma predeterminada. Acabo de tener el mismo problema en uno de mis servidores. La solución para mí fue agregar el siguiente código en un lugar que se lea antes de cualquier otra importación pylab / matplotlib / pyplot :

import matplotlib # Force matplotlib to not use any Xwindows backend. matplotlib.use(''Agg'')

La alternativa es configurarlo en su .matplotlibrc


Encontré que este fragmento de código funciona bien cuando se cambia entre entornos X y no X.

import os import matplotlib as mpl if os.environ.get(''DISPLAY'','''') == '''': print(''no display found. Using non-interactive Agg backend'') mpl.use(''Agg'') import matplotlib.pyplot as plt


La respuesta limpia es tomarse un poco de tiempo para preparar correctamente su entorno de ejecución.

La primera técnica que tiene para preparar su entorno de ejecución es usar un archivo matplotlibrc , tal como lo recomienda sabiamente Chris Q. ,

backend : Agg

en ese archivo. Incluso puede controlar, sin cambios de código, cómo y dónde busca matplotlib y encuentra el archivo matplotlibrc .

La segunda técnica que tiene para preparar su entorno de ejecución es usar la variable de entorno MPLBACKEND (e informar a sus usuarios para que la utilicen):

export MPLBACKEND="agg" python <program_using_matplotlib.py>

Esto es útil porque ni siquiera tiene que proporcionar otro archivo en el disco para que esto funcione. He empleado este enfoque con, por ejemplo, pruebas en integración continua y ejecución en máquinas remotas que no tienen pantallas.

Codificar de forma rígida su backend matplotlib a "Agg" en su código Python es como golpear una clavija cuadrada en un agujero redondo con un martillo grande, cuando, en cambio, podría haberle dicho a matplotlib que debe ser un agujero cuadrado.


Otra cosa que debe verificar es si su usuario actual está autorizado para conectarse a la pantalla X. En mi caso, a la raíz no se le permitió hacer eso y matplotlib se quejaba con el mismo error.

user@debian:~$ xauth list debian/unix:10 MIT-MAGIC-COOKIE-1 ae921efd0026c6fc9d62a8963acdcca0 root@debian:~# xauth add debian/unix:10 MIT-MAGIC-COOKIE-1 ae921efd0026c6fc9d62a8963acdcca0 root@debian:~# xterm

fuente: http://www.debian-administration.org/articles/494 https://debian-administration.org/article/494/Getting_X11_forwarding_through_ssh_working_after_running_su


Para Google Cloud Machine Learning Engine:

import matplotlib as mpl mpl.use(''Agg'') from matplotlib.backends.backend_pdf import PdfPages

Y luego a imprimir al archivo:

#PDF build and save def multi_page(filename, figs=None, dpi=200): pp = PdfPages(filename) if figs is None: figs = [mpl.pyplot.figure(n) for n in mpl.pyplot.get_fignums()] for fig in figs: fig.savefig(pp, format=''pdf'', bbox_inches=''tight'', fig_size=(10, 8)) pp.close()

y para crear el PDF:

multi_page(report_name)


Recibí el error al usar matplotlib a través de Spark. matplotlib.use(''Agg'') no funciona para mí. Al final, el siguiente código funciona para mí. Más aquí

import matplotlib.pyplot as plt. plt.switch_backend(''agg'')


Solo como complemento de la respuesta de Reinout.

La forma permanente de resolver este tipo de problema es editar el archivo .matplotlibrc. Encontrarlo a través de

>>> import matplotlib
>>> matplotlib.matplotlib_fname() # This is the file location in Ubuntu ''/etc/matplotlibrc''

Luego modifique el backend en ese archivo al backend : Agg . Eso es.


Solo repetiré lo que @Ivo Bosticky dijo que puede pasarse por alto. Ponga estas líneas en el inicio MUY del archivo py.

import matplotlib matplotlib.use(''Agg'')

O uno obtendria error

*/usr/lib/pymodules/python2.7/matplotlib/__init__.py:923: 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,*

Esto resolverá todos los problemas de visualización


import matplotlib matplotlib.use(''Agg'') import matplotlib.pyplot as plt

Esto funciona para mi.