import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 创建网格点 x = np.linspace(-4, 4, 100) y = np.linspace(1, 3, 100) z = np.linspace(-4, 4, 100) x, y,z = np.meshgrid(x, y,z) z = np.squeeze(z) # 第一个曲面方程 eq1 = x**2 + z**2 + y**2 - 4*y # 第二个曲面方程 eq2 = x**2 + y**2 + z**2 - 4 # 设置绘图 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 绘制第一个曲面 ax.contour3D(x, y, z, eq1, cmap='viridis') # 绘制第二个曲面 ax.contour3D(x, y, z, eq2, cmap='plasma') # 设置坐标轴标签 ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') # 显示图形 plt.show() TypeError: Input z must be 2D, not 3D
时间: 2024-04-08 13:34:39 浏览: 158
import numpy as np import matplotlib.pyplot as plt import math
我注意到你仍然遇到了相同的错误。这可能是由于`contour3D`函数需要二维数组作为输入,而不接受三维数组。我们可以使用`meshgrid`函数来生成三维网格,但是在绘制曲面时,我们只需要使用其中两个维度来表示坐标。
修改代码如下:
```python
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 创建网格点
x = np.linspace(-4, 4, 100)
y = np.linspace(1, 3, 100)
z = np.linspace(-4, 4, 100)
# 创建二维网格
x, y = np.meshgrid(x, y)
# 第一个曲面方程
eq1 = x**2 + z**2 + y**2 - 4*y
# 第二个曲面方程
eq2 = x**2 + y**2 + z**2 - 4
# 设置绘图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制第一个曲面
ax.contour3D(x, y, eq1, cmap='viridis')
# 绘制第二个曲面
ax.contour3D(x, y, eq2, cmap='plasma')
# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
# 显示图形
plt.show()
```
这样修改后,你应该能够成功运行并显示所需的三维曲面图。
阅读全文