我试图用 sympy 绘制一个简单的环面。我想使用该图作为图像。 不幸的是,轴的纵横比使图像看起来很长。
在代码中,我尝试将
aspect_ratio
更改为 equal
,如下所示:
from sympy import *
from sympy.plotting import *
u,v = symbols("u, v")
r = 1
R = 2
p = plot3d_parametric_surface(cos(u)*(r*cos(v)+R), sin(u)*(r*cos(v)+R), r*sin(v), (u, 0, 2*pi), (v, 0, 2*pi), show = False)
p.aspect_ratio = "equal"
p.show()
但是随后出现了这个错误:
ValueError: could not convert string to float: 'q'
错误导致第1296行
plot.py
,其中有这样的if语句:
if aspect != 'auto':
aspect = float(aspect[1]) / aspect[0]
所以我尝试将其注释掉,然后代码运行,结果略有变化。
此外,根据此错误(将值设置为“aa”后),这些选项应该默认工作:
ValueError: 'aa' is not a valid value for aspect; supported values are 'auto', 'equal', 'equalxy', 'equalyz', 'equalxz'
实现您正在寻找的结果的最简单方法是使用 Sympy 绘图模块,其中该错误已被修复:
from spb import *
plot3d_parametric_surface(cos(u)*(r*cos(v)+R), sin(u)*(r*cos(v)+R), r*sin(v), (u, 0, 2*pi), (v, 0, 2*pi), aspect="equal")
如果您安装完整的软件包,您可以轻松创建更多奇特的绘图。例如,使用 Plotly:
plot3d_parametric_surface(
cos(u)*(r*cos(v)+R), sin(u)*(r*cos(v)+R), r*sin(v), (u, 0, 2*pi), (v, 0, 2*pi), "u",
aspect="equal", backend=PB,
wireframe=True, wf_n1=30, wf_n2=20,
use_cm=True, color_func=lambda uu, vv: uu
)