2013-12-22 1 views
3

Это мое первое сообщение, поэтому, пожалуйста, прощайте.

Я пытаюсь создать анимацию с использованием matplotlib, и я мог бы сделать это отлично, пока несколько дней назад, пока я не перешел на OS X Mavericks, на котором все ад сломался. Обратите внимание: приведенный ниже код работал в OS X Lion.

Вдруг я получаю сообщение об ошибке при попытке запустить этот код в 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() 

Это производит следующее сообщение об ошибке:

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 

Теперь, как вы можете, надеюсь увидеть, у меня есть попытался использовать бэкэнд TkAgg вместо бэкэнда «Agg», как рекомендовано в документации (https://wiki.python.org/moin/TkInter). Это, похоже, вызывает проблемы с новой версией OS X, поскольку X11 больше не поддерживается, и вместо этого нужно установить XQuartz. Это я тоже сделал. Но это все равно дает мне такую ​​же ошибку.

Я также попытался установить py33-tkinter с помощью macports, но это тоже не сработало, но, возможно, я не сделал это правильно. Я просто сделал

sudo port py33-tkinter 

Я по-прежнему довольно новичок в python и unix в целом.

UPDATE (22/12/13):

Я следующее

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 

Затем запускали тест Tkinter

>>> 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 
>>> 

Может быть полезно для тех, кто знает об этом лучше меня.

+1

Вы должны опубликовать свое решение в качестве ответа (и пометить его как правильный ответ). – asmeurer

+0

Ах да, спасибо за это. – Astrid

+0

Связанные: http://stackoverflow.com/questions/2801882/generating-a-png-with-matplotlib-when-display-is-undefined –

ответ

2

РЕШЕНИЕ

Эта задача была решена, выполнив следующие действия, которое было вызвано проблемой с XQuartz;

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

Я думал, что переустановка XQuartz будет повторно включить запуск программ, но, видимо, этого не произошло. Теперь все работает.

1

Эта задача была решена, выполнив следующие действия

matplotlib.use ('Agg')

импорт Matplotlib в MPL

импорт Numpy в нп

импорт matplotlib.pyplot в PLT


импорт matplotlib

matplotlib.использовать («») AGG

выше этих двух линий, должны быть в топ-кодов