0

嗨,我在 ipad 上使用 Pythonista 3:0。作为初学者,我下载了示例进行尝试。它们工作了一段时间,但现在当我尝试运行它们时没有响应。原始 Phthonista 安装中的所有示例程序都可以完美运行。

例如,这不起作用。当我按下三角形时没有任何反应。谢谢

# -*- coding: utf-8 -*-from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
from itertools import product, combinations
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.set_aspect("equal")

#draw cube
r = [-1, 1]
for s, e in combinations(np.array(list(product(r,r,r))), 2): 
    if np.sum(np.abs(s-e)) == r[1]-r[0]: 
        ax.plot3D(*zip(s,e), color="b")

# draw sphere
u, v = np.mgrid[0:2*np.pi:20j, 0:np.pi:10j]
x=np.cos(u)*np.sin(v)
y=np.sin(u)*np.sin(v)
z=np.cos(v)
ax.plot_wireframe(x, y, z, color="r")

#draw a point
ax.scatter([0],[0],[0],color="g",s=100)

#draw a vector
from matplotlib.patches import FancyArrowPatch
from mpl_toolkits.mplot3d import proj3d

class Arrow3D(FancyArrowPatch):
    def __init__(self, xs, ys, zs, *args, **kwargs):
        FancyArrowPatch.__init__(self, (0,0), (0,0), *args, **kwargs)
        self._verts3d = xs, ys, zs

    def draw(self, renderer):
        xs3d, ys3d, zs3d = self._verts3d
        xs, ys, zs = proj3d.proj_transform(xs3d, ys3d, zs3d, renderer.M)
        self.set_positions((xs[0],ys[0]),(xs[1],ys[1]))
        FancyArrowPatch.draw(self, renderer)

a = Arrow3D([0,1],[0,1],[0,1], mutation_scale=20, lw=1, arrowstyle="-|>", color="k")
ax.add_artist(a)
plt.show()
4

2 回答 2

0

你使用的是pythonista 3的应用商店版本吗?还是测试版?您的代码在测试版中对我来说非常好(如果我取消注释导入 Axes3D 行,否则我会收到有关无效投影的错误)

我相信应用商店版本可能与 python 3 版本的 matplotlib 有问题(例如,使用自定义后端导致崩溃)。尝试使用 python 2.7 解释器看看是否有效。

此外,有些人遇到的一个常见问题是,他们在站点包或与脚本相同的文件夹中创建了 .py 文件,这些文件覆盖了一些所需的导入。检查您的站点包并确保删除或重命名任何名为 numpy 或 matplotlib 的脚本或文件夹,然后强制退出 pythonista。

最后,您可以尝试运行您的脚本行以查看某处是否存在问题。例如,通过长按放置断点,然后当您按下播放时,它会询问您是否要使用调试器。这将让您检查 plt 是否是来自私有路径的 matplotlib.pyplot 包等。

在 pythonista 社区论坛或 slack 频道上,您可能也有更好的解决 pythonista 问题的运气。

于 2016-11-19T20:35:32.833 回答
0

在我看来,Pythonista 的 matplotlib 可能会从 0.9x 升级到 1.x。您应该使用不同的语法,如下所示。

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
from itertools import product, combinations

fig = plt.figure()
ax = Axes3D(fig)   ## it's different now.
ax.set_aspect("equal")
于 2016-10-19T13:02:17.110 回答