30行Python代码实现3D数据可视化!非常惊艳

回顾 2D 作图用赛贝尔曲线作 2d 图 。 此图是用基于 Matplotlib 的 Path 通过赛贝尔曲线实现的 , 有对赛贝尔曲线感兴趣的朋友们可以深入了解一下 。 在 matplotlib 中 , figure 为画布 , axes 为绘图区 , fig.add_subplot()、plt.subplot() 方法均可以创建子图 。 以下是作图实践 。
import matplotlib.path as mpathimport matplotlib.patches as mpatchesimport matplotlib.pyplot as pltfig, ax = plt.subplots()#定义绘图指令与控制点坐标Path = mpath.Path# Path 控制坐标点绘制贝塞尔曲线# 图形数据构造# MOVETO表示将绘制起点移动到指定坐标# CURVE4表示使用4个控制点绘制3次贝塞尔曲线# CURVE3表示使用3个控制点绘制2次贝塞尔曲线# LINETO表示从当前位置绘制直线到指定位置# CLOSEPOLY表示从当前位置绘制直线到指定位置 , 并闭合多边形path_data = http://kandian.youth.cn/index/[(Path.MOVETO, (1.88, -2.57)),(Path.CURVE4, (0.35, -1.1)),(Path.CURVE4, (-1.75, 1.5)),(Path.CURVE4, (0.375, 2.0)),(Path.LINETO, (0.85, 1.15)),(Path.CURVE4, (2.2, 3.2)),(Path.CURVE4, (3, 0.05)),(Path.CURVE4, (2.0, -1.5)),(Path.CLOSEPOLY, (1.58, -2.57)),]codes,verts = zip(*path_data)path = mpath.Path(verts, codes)patch = mpatches.PathPatch(path, facecolor='r', alpha=0.5)ax.add_patch(patch)# plot control points and connecting linesx, y = zip(*path.vertices)line, = ax.plot(x, y, 'go-')ax.grid()ax.axis('equal')plt.show()
30行Python代码实现3D数据可视化!非常惊艳文章插图
心型效果图
3D 帽子图1Matplotlib 绘制 3D 图形使用的是 mplot3d Toolkit , 即 mplot3d 工具包 。 绘制 3D 图可以通过创建子图 , 然后指定 projection 参数 为 3d 即可 , 返回的 ax 为 Axes3D 对象 。
导入包:
from matplotlib import cmfrom matplotlib.ticker import LinearLocator, FormatStrFormatterfrom mpl_toolkits.mplot3d import Axes3D绘图全过程:
【30行Python代码实现3D数据可视化!非常惊艳】import matplotlib.pyplot as pltfrom matplotlib import cmfrom matplotlib.ticker import LinearLocator, FormatStrFormatterfrom mpl_toolkits.mplot3d import Axes3Dimport numpy as npfig = plt.figure()# 指定图形类型是 3d 类型ax = fig.add_subplot(projection='3d')# 构造数据X = np.arange(-5, 5, 0.25)Y = np.arange(-5, 5, 0.25)X, Y = np.meshgrid(X, Y)R = np.sqrt(X**2 + Y**2)Z = np.sin(R)# Plot the surface.surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,linewidth=0, antialiased=False)# Customize the z axis.ax.set_zlim(-1.01, 1.01)ax.zaxis.set_major_locator(LinearLocator(10))ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))# Add a color bar which maps values to colors.fig.colorbar(surf, shrink=0.5, aspect=5)plt.show()呈现效果:
30行Python代码实现3D数据可视化!非常惊艳文章插图
帽子图1
3D 帽子图2import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dfig = plt.figure()# 指定图形类型为 3d 类型ax = fig.add_subplot(111, projection='3d')# X, Y valueX = np.arange(-5, 5, 0.25)Y = np.arange(-5, 5, 0.25)# 设置 x-y 平面的网格X, Y = np.meshgrid(X, Y)R = np.sqrt(X ** 2 + Y ** 2)# height valueZ = np.sin(R)# rstride:行之间的跨度cstride:列之间的跨度# rcount:设置间隔个数 , 默认50个 , ccount:列的间隔个数不能与上面两个参数同时出现#vmax和vmin颜色的最大值和最小值ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap('rainbow'))# zdir : 'z' | 'x' | 'y' 表示把等高线图投射到哪个面# offset : 表示等高线图投射到指定页面的某个刻度ax.contourf(X,Y,Z,zdir='z',offset=-2)# 设置图像z轴的显示范围 , x、y轴设置方式相同ax.set_zlim(-2,2)plt.show()