Matplotlib 3D绘图,mplot3d工具集是matplotlib内置的标配,可用来实现3D数据可视化功能。如果生成的图形在单独的窗口中显示,还可以用鼠标旋转三维图形的轴进行查看。本文主要介绍3D曲面图,3D散点图,3D条形图。
mplot3d任然使用Figure对象,Axes对象要替换为该工具集的Axes3D对象,使用如下指令导入Axes3D对象。
from mpl_toolkits.mplot3d import Axes3D
3D 曲面图
前面我们用等值线表示三维曲面,使用mplot3d 可以将表面直接绘制成3D形状。
计算分隔线坐标后,就可以用plot_surface()函数绘制曲面,如下所示:
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import numpy as np def f(x, y): return (1 - y**5 + x**5)*np.exp(-x**2-y**2) fig = plt.figure() ax = Axes3D(fig) X = np.arange(-2, 2, 0.1) Y = np.arange(-2, 2, 0.1) X, Y = np.meshgrid(X, Y) ax.plot_surface(X, Y, f(X,Y), rstride=1, cstride=1) plt.title("geek-docs.com", fontsize=20, fontname="Times New Roman") plt.show()
输入结果如下所示:
可以使用cmap参数指定各颜色,可以用view_init()函数旋转曲面,它的两个参数:elev指定从哪个高度查看曲面,azim参数指定曲面旋转的角度。如下所示:
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import numpy as np def f(x, y): return (1 - y**5 + x**5)*np.exp(-x**2-y**2) fig = plt.figure() ax = Axes3D(fig) X = np.arange(-2, 2, 0.1) Y = np.arange(-2, 2, 0.1) X, Y = np.meshgrid(X, Y) ax.plot_surface(X, Y, f(X,Y), rstride=1, cstride=1, cmap=plt.cm.hot) plt.title("geek-docs.com", fontsize=20, fontname="Times New Roman") ax.view_init(elev=30, azim=125) plt.show()
输出结果如下:
3D 散点图
通过散点图能够识别数据点的分布是否遵循某种特定趋势,尤其是可以识别它们是否聚集成簇的趋势。
如下所示,我们多少使用Axes3D对象的scatter()函数,在同一个3D对象中显示不同的序列。
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import numpy as np xs = np.random.randint(30, 40, 100) ys = np.random.randint(20, 30, 100) zs = np.random.randint(10, 20, 100) xs2 = np.random.randint(50, 60, 100) ys2 = np.random.randint(30, 40, 100) zs2 = np.random.randint(50, 70, 100) xs3 = np.random.randint(10, 30, 100) ys3 = np.random.randint(40, 50, 100) zs3 = np.random.randint(40, 50, 100) fig = plt.figure() ax = Axes3D(fig) ax.scatter(xs, ys, zs) ax.scatter(xs2, ys2, zs2, c= 'r', marker='^') ax.scatter(xs3, ys3, zs3, c='g', marker='*') ax.set_xlabel('X Label') ax.set_ylabel('Y Label') ax.set_zlabel('Z label') plt.title("geek-docs.com", fontsize=20, fontname="Times New Roman") plt.show()
输出结果如下:
3D 条形图
极客教程前面有介绍2D条形图,数据分析常常用到3D条形图。要绘制这种图表,需要使用Axes3D对象的bar()函数。如果定义了多序列,可以在同一个3D对象上多次调用bar()函数,如下所示:
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import numpy as np x = np.arange(8) y = np.random.randint(0, 10, 8) y2 = y + np.random.randint(0, 3, 8) y3 = y2 + np.random.randint(0, 3, 8) y4 = y3 + np.random.randint(0, 3, 8) y5 = y4 + np.random.randint(0, 3, 8) clr = ['#4bb2c5','#c5b47f','#EAA228','#579575','#839557','#958c12','#953579','#4b5de4'] fig = plt.figure() ax = Axes3D(fig) ax.bar(x, y, 0, zdir='y', color=clr) ax.bar(x, y2, 10, zdir='y', color=clr) ax.bar(x, y3, 20, zdir='y', color=clr) ax.bar(x, y4, 30, zdir='y', color=clr) ax.bar(x, y5, 40, zdir='y', color=clr) ax.set_xlabel('X Label') ax.set_ylabel('Y Label') ax.set_zlabel('Z label') ax.view_init(elev=40) plt.title("geek-docs.com", fontsize=20, fontname="Times New Roman") plt.show()
输出结果如下:
极客教程相关文章推荐:
Matplotlib 极区图
Matplotlib 等值线图
Matplotlib 饼图
Matplotlib 水平条形图
Matplotlib 条形图
Matplotlib 直方图
Matplotlib 线性图
版权声明:本页面内容旨在传播知识,为用户自行发布,若有侵权等问题请及时与本网联系,我们将第一时间处理。E-mail:284563525@qq.com