python 如何使用 matplotlib 制作 3D 数据表面图
How to make a 3D data surface plot using matplotlib in python
我正在尝试使用 matplotlib 制作实验数据的 3d 曲面图。我想针对相同的 X 和 Y 轴绘制不同的 Z 值。当我尝试下面的简单代码时,出现错误
"plot_surface() missing 1 required positional argument: 'Z' "。
Axes3D 包似乎只有在 Z 作为 X 和 Y 的函数而不是实际数据矩阵给出时才有效。有人知道解决这个问题的方法吗?
请注意,我需要的Zmatrix是实际数据,但我这里只是用了一个随机矩阵来说明。
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
fig = plt.figure()
X=[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
Y= [0,2500,5000,7500,10000,15000,20000,25000,30000,35000,40000,45000,50000,55000,60000,65000,70000]
Zmatrix=np.random.rand(len(X),len(Y))
Axes3D.plot_surface(X,Y,Zmatrix)
这是曲面图的示例。
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import random
def fun(x, y):
return x**2 + y
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = y = np.arange(-3.0, 3.0, 0.05)
X, Y = np.meshgrid(x, y)
zs = np.array([fun(x,y) for x,y in zip(np.ravel(X), np.ravel(Y))])
Z = zs.reshape(X.shape)
ax.plot_surface(X, Y, Z)
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
plt.show()
您的代码存在一些问题:
首先,您必须获得 X 和 Y 的 meshgrid
(所有组合均为矩阵)。接下来在 Zmatrix
中交换 len(X)
和 len(Y)
。然后先在 ax
.
上定义 ax = Axes3D(plt.gcf())
和 plot_surface
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
fig = plt.figure()
X=[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
Y= [0,2500,5000,7500,10000,15000,20000,25000,30000,35000,40000,45000,50000,55000,60000,65000,70000]
Xm, Ym = np.meshgrid(X, Y)
Zmatrix=np.random.rand(len(Y),len(X))
ax = Axes3D(plt.gcf())
ax.plot_surface(Xm, Ym, Zmatrix)
我正在尝试使用 matplotlib 制作实验数据的 3d 曲面图。我想针对相同的 X 和 Y 轴绘制不同的 Z 值。当我尝试下面的简单代码时,出现错误
"plot_surface() missing 1 required positional argument: 'Z' "。
Axes3D 包似乎只有在 Z 作为 X 和 Y 的函数而不是实际数据矩阵给出时才有效。有人知道解决这个问题的方法吗?
请注意,我需要的Zmatrix是实际数据,但我这里只是用了一个随机矩阵来说明。
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
fig = plt.figure()
X=[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
Y= [0,2500,5000,7500,10000,15000,20000,25000,30000,35000,40000,45000,50000,55000,60000,65000,70000]
Zmatrix=np.random.rand(len(X),len(Y))
Axes3D.plot_surface(X,Y,Zmatrix)
这是曲面图的示例。
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import random
def fun(x, y):
return x**2 + y
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = y = np.arange(-3.0, 3.0, 0.05)
X, Y = np.meshgrid(x, y)
zs = np.array([fun(x,y) for x,y in zip(np.ravel(X), np.ravel(Y))])
Z = zs.reshape(X.shape)
ax.plot_surface(X, Y, Z)
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
plt.show()
您的代码存在一些问题:
首先,您必须获得 X 和 Y 的 meshgrid
(所有组合均为矩阵)。接下来在 Zmatrix
中交换 len(X)
和 len(Y)
。然后先在 ax
.
ax = Axes3D(plt.gcf())
和 plot_surface
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
fig = plt.figure()
X=[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
Y= [0,2500,5000,7500,10000,15000,20000,25000,30000,35000,40000,45000,50000,55000,60000,65000,70000]
Xm, Ym = np.meshgrid(X, Y)
Zmatrix=np.random.rand(len(Y),len(X))
ax = Axes3D(plt.gcf())
ax.plot_surface(Xm, Ym, Zmatrix)