python - 试图将绘图显示限制为具有实心墙的立方体,matplotlib 3d 表面
问题描述
我正在尝试从 Maple 复制 python 图。我希望情节限制在立方体的墙内。它应该看起来像这样干净: Maple Plot
这是 Maple 的代码:
> Digits := 20;with(plots);s := 2;
> x := array(1 .. 4);y := array(1 .. 4);for i to 4 do x[i] := evalf(-1 + 2*rand()/10^12); y[i] := evalf(-1 + 2*rand()/10^12); end do;
> F := (u, v) -> ((u - x[1])^2 + (v - y[1])^2)^(-1/2*s) + ((u - x[2])^2 + (v - y[2])^2)^(-1/2*s) + ((u - x[3])^2 + (v - y[3])^2)^(-1/2*s) + ((u - x[4])^2 + (v - y[4])^2)^(-1/2*s);
> Minimize(F(u, v), u = -1 .. 1, v = -1 .. 1);
[3.0238548714143095703, [u = 1.0, v = 1.0]]
> plot3d(F(u, v), u = -1 .. 1, v = -1 .. 1, view = 0 .. 5*F(1, 1));
这是我的 python 代码和绘图输出。请帮忙!
def f(u ,v):
z = ((u - x[0]) ** 2 + (v - y[0]) ** 2) ** (-s * 0.5) \
+ ((u - x[1]) ** 2 + (v - y[1]) ** 2) ** (-s * 0.5) \
+ ((u - x[2]) ** 2 + (v - y[2]) ** 2) ** (-s * 0.5) \
+ ((u - x[3]) ** 2 + (v - y[3]) ** 2) ** (-s * 0.5)
return z
U = np.linspace(-1, 1)
V = np.linspace(-1, 1)
X, Y = np.meshgrid(U, V)
Z = f(X, Y)
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, cmap='viridis', edgecolor='none')
ax.set_zlim(0, 5*f(1,1))
ax.set_title('Surface plot')
ax.set_xlabel('u')
ax.set_ylabel('v')
plt.show()
该图应保持在轴内,并应在我放置限制的位置切割(类似于 Maple 的图)。但它反而“流动”到外面并有一些奇怪的垂直线。 蟒蛇情节
解决方案
推荐阅读
- javascript - Angular 组件与 Input() 的交互未同步
- c++ - Qt - 为 QML 定义全局函数
- r - 如何将文本文件中的“Inf”字符串转换为数字
- netsuite - Netsuite 脚本组合/合并多个语句
- javascript - Vue.js 中 JSON 对象的值
- node.js - 从Angular 5中的http请求获取数据
- python - 异常类型:MissingSchema / beautifulsoup
- c# - ASP.net WebAPI Post 方法在发布时返回 405
- python - Python 轮子包 Linux vs windows
- sqlite - 为什么生成的变量之间的 SQLite 条件不能正确比较?