【Python】函数图像绘制:二维图像、三维图像、散点图、心形图
所有需要用的包二维图像三维图像散点图绘制心形图绘制所有需要用的包
from mpl_toolkits.mplot3d import Axes3Dfrom matplotlib import pyplot as pltimport numpy as npimport randomplt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
二维图像
import numpy as npimport pylab as pltx = np.arange(-100, 100, 1) #定义x的范围为-100至100,步长为1y = x * xplt.xlabel('x') #绘制X轴plt.ylabel('y') #绘制Y轴plt.title("y = x * x") #绘制图像标题plt.plot(x, y)plt.show()
三维图像
图像方程:z = xx+yy
绘制三维图像我们需要用到Axes3D库,调用ax.plot_surface进行绘制,其中plot_surface的参数如下图所示
其中cmap的渐变色参数取值见:
/2.0.2/examples/color/colormaps_reference.html
代码如下:
from mpl_toolkits.mplot3d import Axes3D import numpy as npfrom matplotlib import pyplot as pltimport randomfig = plt.figure()ax = Axes3D(fig)x=np.arange(-30,30,1)y=np.arange(-30,30,1)x, y = np.meshgrid(x, y)z=x**2+y**2ax.set_xlabel('X')ax.set_ylabel('Y')ax.set_zlabel('Z')ax.plot_surface(x, y, z, cmap='rainbow')plt.show()
散点图绘制
散点图绘制需要用到ax.scatter,具体代码如下
from mpl_toolkits.mplot3d import Axes3D import numpy as npfrom matplotlib import pyplot as pltimport randomfig = plt.figure()ax = Axes3D(fig)x=np.arange(-30,30,1)y=np.arange(-30,30,1)x, y = np.meshgrid(x, y)z=x**2+y**2ax.set_xlabel('X')ax.set_ylabel('Y')ax.set_zlabel('Z')ax.scatter(x, y, z,marker=".",color="blue")plt.show()
更多随机散点图相关内容可见:/qq_43605229/article/details/115439364
心形图绘制
二维:
from matplotlib import pyplot as pltimport numpy as npsize = 2x = np.linspace(-size, size, 400)plt.plot(x, np.sqrt(1-(np.abs(x)-1)*(np.abs(x)-1)))plt.plot(x, np.arccos(1-np.abs(x))-np.pi)plt.show()
三维:
from mpl_toolkits.mplot3d import Axes3Dfrom matplotlib import cmfrom matplotlib.ticker import LinearLocator, FormatStrFormatterimport matplotlib.pyplot as pltimport numpy as npdef heart_3d(x,y,z):return (x**2+(9/4)*y**2+z**2-1)**3-x**2*z**3-(9/80)*y**2*z**3def plot_implicit(fn, bbox=(-1.5, 1.5)):xmin, xmax, ymin, ymax, zmin, zmax = bbox*3fig = plt.figure()ax = fig.add_subplot(111, projection='3d')A = np.linspace(xmin, xmax, 100) # resolution of the contourB = np.linspace(xmin, xmax, 40) # number of slicesA1, A2 = np.meshgrid(A, A) # grid on which the contour is plottedfor z in B: # plot contours in the XY planeX, Y = A1, A2Z = fn(X, Y, z)cset = ax.contour(X, Y, Z+z, [z], zdir='z', colors=('r',))for y in B: # plot contours in the XZ planeX, Z = A1, A2Y = fn(X, y, Z)cset = ax.contour(X, Y+y, Z, [y], zdir='y', colors=('red',))for x in B: # plot contours in the YZ planeY, Z = A1, A2X = fn(x, Y, Z)cset = ax.contour(X+x, Y, Z, [x], zdir='x',colors=('red',))ax.set_zlim3d(zmin, zmax)ax.set_xlim3d(xmin, xmax)ax.set_ylim3d(ymin, ymax)plt.show()if __name__ == '__main__':plot_implicit(heart_3d)