Este es mi primer post así que por favor, perdona.

Estoy tratando de crear una animación usando matplotlib, y yo podría hacer esto perfectamente bien hasta que hace un par de días, hasta que he actualizado a OS X Mavericks, tras lo cual se desató el infierno. Nota, el código de abajo, trabajó en OS X Lion.

De repente yo estaba recibiendo un mensaje de error al tratar de ejecutar este código en Mavericks:

import numpy as np
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import pandas as pd
import mpl_toolkits.mplot3d.axes3d as p3
#----->READ AND FORMAT DATA-----------------------------------------------#
.
.
.
.
#-------------------------------------------------------------------------#
# Set up figure & 3D axis for animation
fig = plt.figure(figsize=(10,10))
ax = fig.add_axes([0, 0, 1, 1], projection='3d') # Correct way to make 3D plots
# set up lines and points
lines = sum([ax.plot([], [], [], '-')], [])
pts = sum([ax.plot([], [], [], 'o')], [])
# Setting the axes properties
ax.set_xlim3d([-2000, 2000])
ax.set_xlabel('X')
ax.set_ylim3d([1350, 1400])
ax.set_ylabel('Y')
ax.set_zlim3d([-340, 600])
ax.set_zlabel('Z')
# set point-of-view: specified by (altitude degrees, azimuth degrees)
ax.view_init(40, 0)
ax.set_title('animation')
ax.grid() # add grid
# Initialisation function: plot the background of each frame
def init():
for line, pt in zip(lines, pts):
# Lines
line.set_data([], [])
line.set_3d_properties([])
# Points
pt.set_data([], [])
pt.set_3d_properties([])
return lines + pts
# Animation function.  This will be called sequentially with the frame number
def animate(i):
# we'll step two time-steps per frame.  This leads to nice results.
i = (2.5 * i)
for line, pt, dat in zip(lines, pts, data):
x, y, z = dat[:i].T
# Lines
line.set_data(x, y)
line.set_3d_properties(z)
# Points
pt.set_data(x[-1:], y[-1:])
pt.set_3d_properties(z[-1:])
ax.view_init(45, i)
fig.canvas.draw()
return lines + pts
#----->ANIMATION-----------------------------------------------------------#
# Creating the Animation object
anim = animation.FuncAnimation(fig, animate, init_func=init,
frames=120, interval=30, blit=True)
# Save as mp4. This requires mplayer or ffmpeg to be installed
# anim.save('one_marker_3D.mp4', fps=15, extra_args=['-vcodec', 'libx264'])
plt.show()

Esto produce el siguiente mensaje de error:

Traceback (most recent call last):
File "shoulder_animation_walking_straight_3D.py", line 26, in <module>
fig = plt.figure(figsize=(10,10))
File "/Users/me/anaconda/lib/python2.7/site-packages/matplotlib/pyplot.py", line 423, in figure
**kwargs)
File "/Users/me/anaconda/lib/python2.7/site-packages/matplotlib/backends/backend_tkagg.py", line 79, in new_figure_manager
return new_figure_manager_given_figure(num, figure)
File "/Users/me/anaconda/lib/python2.7/site-packages/matplotlib/backends/backend_tkagg.py", line 87, in new_figure_manager_given_figure
window = Tk.Tk()
File "/Users/me/anaconda/lib/python2.7/lib-tk/Tkinter.py", line 1745, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable

Ahora como puedes esperar a ver, he intentado usar el TkAgg backend en lugar de la ‘Global’ backend, como se recomienda en la documentación (https://wiki.python.org/moin/TkInter). Esta parece ser la causa de problemas con la nueva versión de OS X, ya que X11 no es compatible ya, y XQuartz tiene que ser instalado en su lugar. Esto lo he hecho demasiado. Pero todavía me da el mismo error.

También he intentado instalar py33-tkinter el uso de macports, pero que no funcionaba, pero tal vez yo no lo hice correctamente. Yo simplemente hice

sudo port py33-tkinter

Todavía soy bastante nuevo en python y unix en general.

ACTUALIZACIÓN (22/12/13):

Me hizo la siguiente

Python 2.7.5 |Anaconda 1.8.0 (x86_64)| (default, Oct 24 2013, 07:02:20) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import Tkinter

Luego corrió la Tkinter prueba

>>> Tkinter._test()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/me/anaconda/lib/python2.7/lib-tk/Tkinter.py", line 3770, in _test
root = Tk()
File "/Users/me/anaconda/lib/python2.7/lib-tk/Tkinter.py", line 1745, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
>>>

Podría ser útil para alguien que sabe esto mejor que yo.

InformationsquelleAutor Astrid | 2013-12-22

2 Comentarios

  1. 2

    SOLUCIÓN

    Esto fue resuelto por la siguiente, que fue causado por un problema con XQuartz;

    launchctl load -w /Library/LaunchAgents/org.macosforge.xquartz.startx.plist

    Pensé que una reinstalación de XQuartz iba a volver a habilitar launchd, pero al parecer eso no sucedió. Ahora funciona todo.

  2. 1

    Esto fue resuelto por la siguiente

    matplotlib.uso(‘Global’)

    de importación matplotlib como mpl

    import numpy como np

    de importación matplotlib.pyplot como plt


    de importación matplotlib

    matplotlib.uso(‘Global’)

    por encima de este dos líneas debe ser en la parte superior de los códigos de

Dejar respuesta

Please enter your comment!
Please enter your name here