#网上复制了一段代码,运行的时候却出错了
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
def function_2(x,y):
return np.sum(x**2)
fig = plt.figure()
ax = Axes3D(fig)
x = np.arange(-3,-3,0.1)
y = np.arange(-3,-3,0.1)
X,Y = np.meshgrid(x,y)#创建网格,这个是关键
Z = function_2(X,Y)
plt.xlabel('x')
plt.ylabel('y')
ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap='rainbow')
plt.show()
首先,你的问题是Python绘制二次图像,但是我看上去你想绘制的是二元函数图像。二次函数不等于二元函数,二次函数是我们高中学的抛物线,二元函数是未知数为个数2的函数。从你plt_surface来看,你应该是想要绘制一个二元函数,而不是一个二次函数。
然后,你后面是想要画一个三维平面,和你题目毫无相关。
如果你想要一个二元函数,下面的代码是你想要的:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
def function_2(x, y):
return x**2+y**2
fig = plt.figure()
ax = Axes3D(fig)
x = np.arange(-2*np.pi, 2*np.pi, 0.1)
y = np.arange(-2*np.pi, 2*np.pi, 0.1)
X, Y = np.meshgrid(x, y) # 创建网格,这个是关键
Z = function_2(X,Y)
plt.xlabel('x')
plt.ylabel('y')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow')
plt.show()
如果你要你图片中的效果,那么出错的原因是你没有正确导入包。正确的代码如下,对比一下有什么不一样:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
x = np.arange(-2*np.pi, 2*np.pi, 0.1)
y = np.arange(-2*np.pi, 2*np.pi, 0.1)
X, Y = np.meshgrid(x, y) # 创建网格,这个是关键
Z = np.sin(X)*np.cos(Y)
plt.xlabel('x')
plt.ylabel('y')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow')
plt.show()