如何在 SymPy 中更改图形的纵横比?

问题描述 投票:0回答:1

我试图用 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'
matplotlib sympy aspect-ratio
1个回答
0
投票

实现您正在寻找的结果的最简单方法是使用 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
)

© www.soinside.com 2019 - 2024. All rights reserved.