绘制f(x,y)=z=min(x,y)将创建二维三角形而不是三维曲面

2024-06-28 19:17:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解一个涉及笛卡尔平面的问题集,其中:

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被计算为最小值(x,y)

然而,结果是:

enter image description here

我的数学已经不太可靠了,但我期望的是表面积,而不是二维三角形

我对基础数学的理解是错误的还是在matplotlib中计算值/绘制值时出错


Tags: inimportfordatamatplotlibvalue绘制range
1条回答
网友
1楼 · 发布于 2024-06-28 19:17:52

它们应该是曲面。你的数学是对的

不幸的是,您正在绘制两个一维阵列,而不是二维阵列:

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个点来绘制

试试这个:

  1. XY值创建一个数组
  2. 使用这些坐标(对)计算Z
  3. 将每个Z与一对关联:(X, Y)
  4. 现在绘制三元组(X, Y, Z)

相关问题 更多 >