2015-06-05 4 views
2

python noob здесь. Я пытаюсь воссоздать этот примерИнтерактивный python matplotlib

from mpl_toolkits.mplot3d import Axes3D 
from matplotlib.collections import PolyCollection 
import matplotlib.pyplot as plt, mpld3 
from matplotlib import colors 
from matplotlib.colors import colorConverter 
import matplotlib.animation as animation 
import numpy as np 

fig = plt.figure() 
ax = fig.gca(projection='3d') 

cc = lambda arg: colorConverter.to_rgba(arg, alpha=0.6) 

xs = np.arange(0, 10, 0.4) 
verts = [] 
zs = [0.0, 1.0, 2.0, 3.0] 
for z in zs: 
    ys = np.random.rand(len(xs)) 
    ys[0], ys[-1] = 0, 0 
    verts.append(list(zip(xs, ys))) 

poly = PolyCollection(verts, facecolors = [cc('r'), cc('g'), cc('b'), 
              cc('y')]) 
poly.set_alpha(0.7) 
ax.add_collection3d(poly, zs=zs, zdir='y') 

ax.set_xlabel('X') 
ax.set_xlim3d(0, 10) 
ax.set_ylabel('Y') 
ax.set_ylim3d(-1, 4) 
ax.set_zlabel('Z') 
ax.set_zlim3d(0, 1) 
mpld3.show() 

Я хотел сохранить интерактивный сюжет (и отправить его кому-то, кто не использует питон), так mpld3.show(), кажется, что это может сделать трюк. Только я получаю эту ошибку

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Library/Python/2.7/site-packages/mpld3/_display.py", line 338, in show 
    html = fig_to_html(fig, **kwargs) 
    File "/Library/Python/2.7/site-packages/mpld3/_display.py", line 236, in fig_to_html 
    figure_json=json.dumps(figure_json), 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 243, in dumps 
    return _default_encoder.encode(obj) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 207, in encode 
    chunks = self.iterencode(o, _one_shot=True) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 270, in iterencode 
    return _iterencode(o, 0) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 184, in default 
    raise TypeError(repr(o) + " is not JSON serializable") 
TypeError: array([ 0., 10.]) is not JSON serializable 

Я понимаю, что это потому, что что-то является нп массив не список, но когда я

type(verts) 

Я получаю

<type 'list'> 

So Я не уверен, что этот «массив ([0., 10.])»/как это исправить. Пожалуйста, укажите объяснение того, как извлекать/манипулировать объектами типа

<class 'mpl_toolkits.mplot3d.art3d.Poly3DCollection'> 

Извините, что я не хочу. Благодарю вас.

+0

Ваша ошибка дает вам конкретный номер строки, где это происходит? – flexcalibur6

+0

Отредактировано, чтобы включить полную ошибку, которую я получаю. Thanks – user2592729

+0

Хмм. Боюсь, я не смогу вам помочь. Единственное, что я могу подумать, чтобы попытаться (не знаю, почему это имеет значение, но, по-моему, стоит сделать это), нужно изменить 'mpld3.show()' на 'plt.show()', так как так я всегда «показанные» сюжеты в прошлом. – flexcalibur6

ответ

4

Согласно mpld3 github, «3D графики не поддерживаются в mpld3», и, таким образом, производит ошибки вы видите

я натыкался ваш вопрос, потому что я ищу того же раствора (способность поделитесь интерактивным графиком 3D matplotlib с тем, у кого нет Python). Я понимаю, что это не ответ, но я подумал, что все равно стоит поделить? (Я тоже noob, поэтому я не могу даже прокомментировать ваш вопрос)