在Python中绘制3D条件函数
我需要做一个3D绘图,条件是在网格区域中(x-(M/2))^2+(y-(N/2))^2在Python中绘制3D条件函数,python,if-statement,matplotlib,Python,If Statement,Matplotlib,我需要做一个3D绘图,条件是在网格区域中(x-(M/2))^2+(y-(N/2))^2
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
M=70
N=70
r=(N/2)**2
def f(x, y):
if (x-(M/2))**2+(y-(N/2))**2<r:
return (x-(M/2))**2/122.5+(y-(N/2))**2/122.5
return 10.0
x = np.linspace(0, 70, M)
y = np.linspace(0, 70, N)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.contour3D(X, Y, Z, 50, cmap='binary')
plt.show()
将numpy导入为np
将matplotlib.pyplot作为plt导入
从mpl_toolkits.mplot3d导入Axes3D
M=70
N=70
r=(N/2)**2
定义f(x,y):
如果(x-(M/2))**2+(y-(N/2))**2您的错误来自于将数组(x-(M/2))**2+(y-(N/2))**2与标量值r=1225
进行比较的事实
此结果是一个布尔值数组,不能作为条件使用(请参阅)
按照@ImportanceOfBeingErnest的建议,在这种情况下应该使用
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
M=70
N=70
r=(N/2)**2
def f(x, y):
computed = (x-(M/2))**2+(y-(N/2))**2
return np.where(computed < r, r / 122.5, 10.0)
x = np.linspace(0, 70, M)
y = np.linspace(0, 70, N)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.contour3D(X, Y, Z, 50, cmap='binary')
plt.show()
将numpy导入为np
将matplotlib.pyplot作为plt导入
从mpl_toolkits.mplot3d导入Axes3D
M=70
N=70
r=(N/2)**2
定义f(x,y):
计算=(x-(M/2))**2+(y-(N/2))**2
返回np.其中(计算值
是[1,5,0]
大于或小于3
?请阅读numpy.where
。