python - 绘制 f(x,y) = z = min(x,y) 创建 2D 三角形而不是 3D 曲面
问题描述
我试图理解一个涉及笛卡尔平面的问题集,其中:
f(x, y) = min(x, y)
g(x, y) = max(x, y)
h(x, y) = x + y
出于这个原因,我试图使用 python 和 matplotlib 绘制给定的函数,如下所示:
data_x_axis = list(range(11))
data_y_axis = list(range(11))
data_z_axis = []
for x_value in data_x_axis:
data_z_axis.append([min(x_value, y_value) for y_value in data_y_axis])
print(data_z_axis)
%matplotlib notebook
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# Grab some test data.
X = data_x_axis
Y = data_y_axis
Z = np.array(data_z_axis)
# Plot a basic wireframe.
ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)
plt.show()
本质上,这是来自: https ://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#wireframe-plots 的示例代码
x,y 值范围从 0 到 10,z 被计算为 min(x,y)。
然而结果是这样的:
我的数学已经过时了,但我期待的是表面积,而不是二维三角形。
我对基础数学的理解是错误的,还是我在计算值/在 matplotlib 中绘制它们时犯了错误?
解决方案
它们应该是表面。你的数学是对的。
不幸的是,您正在绘制两个一维数组而不是二维数组:
data_x_axis = list(range(11))
data_y_axis = list(range(11))
X = data_x_axis
Y = data_y_axis
ax.plot_wireframe(X, Y, ....
这只是给你 11 个点来绘制。
尝试这个:
X
为和Y
值创建一个数组- 使用这些坐标(对)来计算
Z
- 将每个
Z
与一对相关联:(X, Y)
- 现在绘制三元组
(X, Y, Z)
推荐阅读
- python - 如何在 tkinter 的画布内放置所有小部件?
- java - Junit抛出java.lang.Exception:即使有公共@test也没有可运行的方法
- django - 如何在django中计算对象
- python - 从 pandas.Series 过滤 pandas.DataFrame
- ios - 如何跨 Swift 模块进行调试?
- node.js - 我在安装应用程序后创建了 Shopify 应用程序我想以电子邮件和商店 URL 作为参数将用户带到我的网站
- apache - 如何使用 pgadmin4 和 apache 解决内部服务器错误?
- testing - 我如何将 Jmeter 用作普通浏览器?
- angular - 使用 @angular/elements 为每个组件生成不同的 js 包
- html - 徽标 CSS 导航栏不断爆炸