鱼C论坛

 找回密码
 立即注册
查看: 3672|回复: 19

[已解决]关于报错

[复制链接]
发表于 2020-3-10 09:11:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
贴图如下:

C:\Users\Admin\PycharmProjects\shiyan\venv\Scripts\python.exe C:/Users/Admin/Desktop/1.py
Traceback (most recent call last):
  File "C:/Users/Admin/Desktop/1.py", line 46, in <module>
    ax.set_aspect('equal')
  File "C:\Users\Admin\PycharmProjects\shiyan\venv\lib\site-packages\matplotlib\axes\_base.py", line 1264, in set_aspect
    'It is not currently possible to manually set the aspect '
NotImplementedError: It is not currently possible to manually set the aspect on 3D axes

Process finished with exit code 1


上述错误实在没看明白,然后我在网上找的时候全是英文版,实在看不懂。。。。萌新求大神解惑
最佳答案
2020-3-10 09:24:06

给你改了一下,看符不符合要求
import numpy as np
import matplotlib as mpl
mpl.use("TkAgg")
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.animation as animmation
L1 = 10 #地球环绕轨迹的半径
v = 2*np.pi #地球运动的角速度
t = 0
def updata (data): #随时间t变换设置新的地球位置的坐标,也即是随animmation.FuncAnimation函数的帧数参数变化每一帧的不同坐标位置的图片对象参数
    global line
    line.set_data([data[0], data[1]])
    line.set_3d_properties(data[2])
    return line,
def init(): #地球的起始位置
    global line
    ti = 0
    t = t_drange[np.mod(ti, t_dlen)]
    xt1 = x0 + L1 * np.cos(v * t)
    yt1 = y0 + L1 * np.sin(v * t)
    zt1 = z0 + 0
    line, = ax.plot([xt1], [yt1], [zt1], marker='o', color='blue',markersize=8)
    return line
def data_gen(): #随时间t变换的地球坐标,也即是animmation.FuncAnimation函数的帧数参数
    global x0,y0,z0,t_dlen, t
    data = []
    for ti in range(1,t_dlen):
        xt1 = x0 + L1 * np.cos(v * t)  # 地球与太阳坐标关系方程
        yt1 = y0 + L1 * np.sin(v * t)  # 地球与太阳坐标关系方程
        zt1 = z0
        data.append([xt1, yt1, zt1])
        return data
        t = t_drange[ti]

t_range = np.arange(0, 1 + 0.005, 0.005)#设置环绕一周时间的范围以及运动间隔时间
t_drange = np.arange(0, 1, 0.005 )
t_len = len(t_range)
t_dlen = len(t_drange)
x0 = 0
y0 = 0
z0 = 0
x1 = x0 + L1 * np.cos(v * t_range)#地球坐标随时间变化的方程
y1 = y0 + L1 * np.sin(v * t_range)#地球坐标随时间变化的方程
z1 = z0 + np.zeros(t_len)
f = plt.figure(figsize=(6,6))#绘图的画布
ax = f.add_subplot(111,projection='3d')#设置3d坐标系
#ax.set_aspect('equal')
ax.set_title("Sun-Earth-Moon Model")#设置图像标题
ax.plot([0], [0], [0], marker='o', color= 'red', markersize=16)#绘制太阳的各种属性
ax.plot(x1, y1, z1, 'r')#绘制地球图像
ax.set_xlim([-(L1 + 2), (L1 + 2)])#地球用动模型在坐标系中的范围
ax.set_ylim([-(L1 + 2), (L1 + 2)])#地球用动模型在坐标系中的范围
ax.set_zlim([-5, 5])#地球用动模型在坐标系中的范围
line, = ax.plot([], [], [], marker='o', color='blue',markersize=8,animated = True)#地球的形状颜色等属性
ani = animmation.FuncAnimation(f, updata, frames = data_gen(), init_func = init,interval = 20)#将上述函数对象传如animmation.FuncAnimation函数以生成连读的地球运动模型
plt.show()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-10 09:14:48 | 显示全部楼层
import numpy as np
import matplotlib as mpl
mpl.use("TkAgg")
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.animation as animmation
L1 = 10 #地球环绕轨迹的半径
v = 2*np.pi #地球运动的角速度
def updata (data): #随时间t变换设置新的地球位置的坐标,也即是随animmation.FuncAnimation函数的帧数参数变化每一帧的不同坐标位置的图片对象参数
    global line
    line.set_data([data[0], data[1]])
    line.set_3d_properties(data[2])
    return line,
def init(): #地球的起始位置
    global line
    ti = 0
    t = t_drange[np.mod(ti, t_dlen)]
    xt1 = x0 + L1 * np.cos(v * t)
    yt1 = y0 + L1 * np.sin(v * t)
    zt1 = z0 + 0
    line, = ax.plot([xt1], [yt1], [zt1], marker='o', color='blue',markersize=8)
    return line
def data_gen(): #随时间t变换的地球坐标,也即是animmation.FuncAnimation函数的帧数参数
    global x0,y0,z0,t_dlen
    data = []
    for ti in range(1,t_dlen):
        xt1 = x0 + L1 * np.cos(v * t)  # 地球与太阳坐标关系方程
        yt1 = y0 + L1 * np.sin(v * t)  # 地球与太阳坐标关系方程
        zt1 = z0
        data.append([xt1, yt1, zt1])
        return data
        t = t_drange[ti]

t_range = np.arange(0, 1 + 0.005, 0.005)#设置环绕一周时间的范围以及运动间隔时间
t_drange = np.arange(0, 1, 0.005 )
t_len = len(t_range)
t_dlen = len(t_drange)
x0 = 0
y0 = 0
z0 = 0
x1 = x0 + L1 * np.cos(v * t_range)#地球坐标随时间变化的方程
y1 = y0 + L1 * np.sin(v * t_range)#地球坐标随时间变化的方程
z1 = z0 + np.zeros(t_len)
f = plt.figure(figsize=(6,6))#绘图的画布
ax = f.add_subplot(111,projection='3d')#设置3d坐标系
ax.set_aspect('equal')
ax.set_title("Sun-Earth-Moon Model")#设置图像标题
ax.plot([0], [0], [0], marker='o', color= 'red', markersize=16)#绘制太阳的各种属性
ax.plot(x1, y1, z1, 'r')#绘制地球图像
ax.set_xlim([-(L1 + 2), (L1 + 2)])#地球用动模型在坐标系中的范围
ax.set_ylim([-(L1 + 2), (L1 + 2)])#地球用动模型在坐标系中的范围
ax.set_zlim([-5, 5])#地球用动模型在坐标系中的范围
line, = ax.plot([], [], [], marker='o', color='blue',markersize=8,animated = True)#地球的形状颜色等属性
ani = animmation.FuncAnimation(f, updata, frames = data_gen(), init_func = init,interval = 20)#将上述函数对象传如animmation.FuncAnimation函数以生成连读的地球运动模型
plt.show()

这是完整的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 09:15:30 | 显示全部楼层
目前还不能手动设置3D轴上的方面,是不是哪里冲突了
或者模块版本太低?把代码先发出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 09:18:18 | 显示全部楼层
用百度查,还不理解就用百度翻译,以下为翻译内容:
C: \\用户\\Admin\\ PycharmProjects\\ shiyan\\ venv\\脚本\\python.exe C:/Users/Admin/Desktop/1.py

回溯(最近一次呼叫时间):

文件“C:/Users/Admin/Desktop/1.py”,第46行,在<module>

ax.set_aspect('equal')

文件“C:\\Users\\ Admin\\ PycharmProjects\\ shiyan\\ venv\\ lib\\ site packages\\ matplotlib\\ axes\\ base.py”,第1264行,在set-aspect中

'当前无法手动设置方面'

NotImplementedError:当前无法在三维轴上手动设置方面



进程已完成,退出代码为1

在其中找关键句:
'当前无法手动设置方面'

NotImplementedError:当前无法在三维轴上手动设置方面

就大概知道为什么报错了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-10 09:19:47 | 显示全部楼层
在谷歌翻译的是:当前无法在3D轴上手动设置长宽比
不知道这个报错是什么原因,现在正在考虑重写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 09:22:21 | 显示全部楼层

1,请回复我,就是我回复下面有一个回复的按钮,用它回复我,不然我看不见,只能来会翻帖子
2,先把那一行注释掉,还有会报错的地方。比如你写在init里的那个t,那个变量是在函数作用域啊,
只有全局变量才能global
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 09:24:06 | 显示全部楼层    本楼为最佳答案   

给你改了一下,看符不符合要求
import numpy as np
import matplotlib as mpl
mpl.use("TkAgg")
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.animation as animmation
L1 = 10 #地球环绕轨迹的半径
v = 2*np.pi #地球运动的角速度
t = 0
def updata (data): #随时间t变换设置新的地球位置的坐标,也即是随animmation.FuncAnimation函数的帧数参数变化每一帧的不同坐标位置的图片对象参数
    global line
    line.set_data([data[0], data[1]])
    line.set_3d_properties(data[2])
    return line,
def init(): #地球的起始位置
    global line
    ti = 0
    t = t_drange[np.mod(ti, t_dlen)]
    xt1 = x0 + L1 * np.cos(v * t)
    yt1 = y0 + L1 * np.sin(v * t)
    zt1 = z0 + 0
    line, = ax.plot([xt1], [yt1], [zt1], marker='o', color='blue',markersize=8)
    return line
def data_gen(): #随时间t变换的地球坐标,也即是animmation.FuncAnimation函数的帧数参数
    global x0,y0,z0,t_dlen, t
    data = []
    for ti in range(1,t_dlen):
        xt1 = x0 + L1 * np.cos(v * t)  # 地球与太阳坐标关系方程
        yt1 = y0 + L1 * np.sin(v * t)  # 地球与太阳坐标关系方程
        zt1 = z0
        data.append([xt1, yt1, zt1])
        return data
        t = t_drange[ti]

t_range = np.arange(0, 1 + 0.005, 0.005)#设置环绕一周时间的范围以及运动间隔时间
t_drange = np.arange(0, 1, 0.005 )
t_len = len(t_range)
t_dlen = len(t_drange)
x0 = 0
y0 = 0
z0 = 0
x1 = x0 + L1 * np.cos(v * t_range)#地球坐标随时间变化的方程
y1 = y0 + L1 * np.sin(v * t_range)#地球坐标随时间变化的方程
z1 = z0 + np.zeros(t_len)
f = plt.figure(figsize=(6,6))#绘图的画布
ax = f.add_subplot(111,projection='3d')#设置3d坐标系
#ax.set_aspect('equal')
ax.set_title("Sun-Earth-Moon Model")#设置图像标题
ax.plot([0], [0], [0], marker='o', color= 'red', markersize=16)#绘制太阳的各种属性
ax.plot(x1, y1, z1, 'r')#绘制地球图像
ax.set_xlim([-(L1 + 2), (L1 + 2)])#地球用动模型在坐标系中的范围
ax.set_ylim([-(L1 + 2), (L1 + 2)])#地球用动模型在坐标系中的范围
ax.set_zlim([-5, 5])#地球用动模型在坐标系中的范围
line, = ax.plot([], [], [], marker='o', color='blue',markersize=8,animated = True)#地球的形状颜色等属性
ani = animmation.FuncAnimation(f, updata, frames = data_gen(), init_func = init,interval = 20)#将上述函数对象传如animmation.FuncAnimation函数以生成连读的地球运动模型
plt.show()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-10 09:28:02 | 显示全部楼层
qiuyouzhi 发表于 2020-3-10 09:22
1,请回复我,就是我回复下面有一个回复的按钮,用它回复我,不然我看不见,只能来会翻帖子
2,先把那一 ...

大神我注释掉了那一行,然后你说的地方也确实报错了,怎么改比较合适啊

C:\Users\Admin\PycharmProjects\shiyan\venv\Scripts\python.exe C:/Users/Admin/Desktop/1.py
Traceback (most recent call last):
  File "C:/Users/Admin/Desktop/1.py", line 54, in <module>
    ani = animmation.FuncAnimation(f, updata, frames = data_gen(), init_func = init,interval = 20)#将上述函数对象传如animmation.FuncAnimation函数以生成连读的地球运动模型
  File "C:/Users/Admin/Desktop/1.py", line 27, in data_gen
    xt1 = x0 + L1 * np.cos(v * t)  # 地球与太阳坐标关系方程
UnboundLocalError: local variable 't' referenced before assignment

Process finished with exit code 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 09:33:35 | 显示全部楼层
Shark丶 发表于 2020-3-10 09:28
大神我注释掉了那一行,然后你说的地方也确实报错了,怎么改比较合适啊

C:%users\Admin\Pycha ...

看他的第二个回帖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 09:34:37 | 显示全部楼层
Shark丶 发表于 2020-3-10 09:28
大神我注释掉了那一行,然后你说的地方也确实报错了,怎么改比较合适啊

C:%users\Admin\Pycha ...

用global注释t
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-10 09:34:42 | 显示全部楼层
qiuyouzhi 发表于 2020-3-10 09:24
给你改了一下,看符不符合要求

大神图是出来了,但是不转了
其他的都正常
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-10 09:46:07 | 显示全部楼层
qiuyouzhi 发表于 2020-3-10 09:24
给你改了一下,看符不符合要求

是不是因为9行  设置了t = 0 ,所以图就不动了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 09:46:49 | 显示全部楼层
Shark丶 发表于 2020-3-10 09:34
大神图是出来了,但是不转了
其他的都正常

你看倒数第二行,那个ani只是被赋值了,它不需要调用嘛?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 09:49:43 | 显示全部楼层
Shark丶 发表于 2020-3-10 09:46
是不是因为9行  设置了t = 0 ,所以图就不动了

我认为不是,那个t=0是用来初始化的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-10 10:04:22 | 显示全部楼层
qiuyouzhi 发表于 2020-3-10 09:49
我认为不是,那个t=0是用来初始化的

可能还是原先47行:ax.set_aspect('equal')  的问题上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 10:10:14 | 显示全部楼层
Shark丶 发表于 2020-3-10 10:04
可能还是原先47行:ax.set_aspect('equal')  的问题上

确实有可能,那个函数是用来设置3D面的,注释掉就没办法动了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-10 10:18:51 | 显示全部楼层
qiuyouzhi 发表于 2020-3-10 10:10
确实有可能,那个函数是用来设置3D面的,注释掉就没办法动了吧

怎么都搞不明白那个函数的问题,头好疼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-10 12:07:12 | 显示全部楼层
qiuyouzhi 发表于 2020-3-10 10:10
确实有可能,那个函数是用来设置3D面的,注释掉就没办法动了吧

我又搞了另外一段代码,原先里面也有那个当前无法在3D轴上手动设置长宽比的语句,后来我把那条语句去掉了,结果仿真出来的图可以正常运行:
import numpy as np
import matplotlib as mpl
mpl.use("TkAgg")
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.animation as animmation

r1 = 10 #地球环绕轨迹的半径
r2 = 1 #月球环绕轨迹的半径
omega1 = 2 * np.pi #地球运动的角速度
omega2 = 24 * np.pi #地球自转速度
phi = 5.1454 * np.pi / 180 #地球自转轴角

def update(data): #随时间t变换设置新的地球位置的坐标,也即是随animmation.FuncAnimation函数的帧数参数变化每一帧的不同坐标位置的图片对象参数
    global line1, line2 , line3
    line1.set_data([data[0], data[1]])
    line1.set_3d_properties(data[2])
    line2.set_data([data[3], data[4]])
    line2.set_3d_properties(data[5])
    line3.set_data([data[6], data[7]])
    line3.set_3d_properties(data[8])
    return line1,line2,line3,

def init(): #地球的起始位置
    global line1, line2, line3
    ti = 0
    t = t_drange[np.mod(ti, t_dlen)]
    xt1 = x0 + r1 * np.cos(omega1 * t)
    yt1 = y0 + r1 * np.sin(omega1 * t)
    zt1 = z0 + 0
    xt2 = xt1 + r2 * np.sin(omega2 * t)
    yt2 = yt1 + r2 * np.cos(omega2 * t)/(np.cos(phi) * (1 + np.tan(phi) ** 2))
    zt2 = zt1 + (yt2 - yt1) * np.tan(phi)
    xt21 = xt1 + r2 * np.sin(2 * np.pi * t_range)
    yt21 = yt1 + r2 * np.cos(2 * np.pi * t_range)/(np.cos(phi) * (1 + np.tan(phi) ** 2))
    zt21 = zt1 + (yt21 - yt1) * np.tan(phi)
    line1, = ax.plot([xt1], [yt1], [zt1], marker='o', color='blue',markersize=8)
    line2, = ax.plot([xt2], [yt2], [zt2], marker='o', color='orange',markersize=4)
    line3, = ax.plot(xt21, yt21, zt21, color='purple')
    return line1,line2,line3

def data_gen(): #随时间t变换的地球和月球坐标,也即是animmation.FuncAnimation函数的帧数参数
    global x0,y0,z0,t_dlen
    data = []
    for ti in range(1,t_dlen):
        t = t_drange[ti]
        xt1 = x0 + r1 * np.cos(omega1 * t)
        yt1 = y0 + r1 * np.sin(omega1 * t)
        zt1 = z0
        xt2 = xt1 + r2 * np.sin(omega2 * t)
        yt2 = yt1 + r2 * np.cos(omega2 * t)/(np.cos(phi) * (1 + np.tan(phi) ** 2))
        zt2 = zt1 + (yt2 - yt1) * np.tan(phi)
        xt21 = xt1 + r2 * np.sin(2 * np.pi * t_range)
        yt21 = yt1 + r2 * np.cos(2 * np.pi * t_range)/(np.cos(phi) * (1 + np.tan(phi) ** 2))
        zt21 = zt1 + (yt21 - yt1) * np.tan(phi)
        data.append([xt1, yt1, zt1, xt2, yt2, zt2, xt21, yt21, zt21])
    return data

t_range = np.arange(0, 1 + 0.005, 0.005) #设置环绕一周时间的范围以及运动间隔时间
t_drange = np.arange(0, 1, 0.005 )
t_len = len(t_range)
t_dlen = len(t_drange)
#sun's coordination
x0 = 0
y0 = 0 
z0 = 0
#地球轨道
x1 = x0  + r1 * np.cos(omega1 * t_range)
y1 = y0 + r1 * np.sin(omega1 * t_range)
z1 = z0 + np.zeros(t_len)

#月球轨道
x2 = x1 + r2 * np.sin(omega2 * t_range)
y2 = y1 + r2 * np.cos(omega2 * t_range)/(np.cos(phi) * (1 + np.tan(phi) ** 2))
z2 = z1 + (y2 - y1) * np.tan(phi)


f = plt.figure(figsize=(6,6)) #绘图的画布
ax  = f.add_subplot(111,projection='3d') #设置3d坐标系
ax.set_title("Sun-Earth-Moon Model") #设置图像标题(太阳-地球-月亮转动模型)

ax.plot([0], [0], [0], marker='o', color= 'red', markersize=16) #绘制太阳的各种属性
ax.plot(x1, y1, z1, 'r') #绘制地球图像
ax.plot(x2, y2, z2, 'b') #绘制月球图像
ax.set_xlim([-(r1 + 2), (r1 + 2)]) #太阳用动模型在坐标系中的范围
ax.set_ylim([-(r1 + 2), (r1 + 2)]) #地球用动模型在坐标系中的范围
ax.set_zlim([-5, 5]) #月球用动模型在坐标系中的范围

#红色球体代表太阳,蓝色球体代表地球,橙色球体代表月亮
line1, = ax.plot([], [], [], marker='o', color='blue',markersize=8,animated = True)
line2, = ax.plot([], [], [], marker='o', color='orange',markersize=4,animated = True)
line3, = ax.plot([], [], [], color='purple',animated = True)

# 将上述函数对象传如animmation.FuncAnimation函数以生成连读的地球运动模型
ani = animmation.FuncAnimation(f, update, frames = data_gen(), init_func = init,interval = 20)

plt.show()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2020-3-10 12:15:19 | 显示全部楼层
Shark丶 发表于 2020-3-10 12:07
我又搞了另外一段代码,原先里面也有那个当前无法在3D轴上手动设置长宽比的语句,后来我把那条语句去掉了 ...

既然问题解决了,就把帖子改成已经解决或者
设置一个最佳答案吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-10 14:07:44 | 显示全部楼层
qiuyouzhi 发表于 2020-3-10 12:15
既然问题解决了,就把帖子改成已经解决或者
设置一个最佳答案吧

嘻嘻,好滴
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 17:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表