Python+Matplotlib绘制3D图像的示例详解
目录
- 1. 绘制3D柱状图
- 2. 绘制3D曲面图
- 示例1
- 示例2
- 3.绘制3D散点图
- 4. 绘制3D曲线图
1. 绘制3D柱状图 绘制3D柱状图使用的是axes3d.bar()方法。
可能跟我们中学学的有一点不同的是,其语法如下:
bar(left, height, zs=0, zdir=‘z’, *args, **kwargs)
其中left表示指向侧边的轴,zs表示指向我们的方向的轴,height即表示高度的轴。这三者都需要是一维的序列对象。
在调用相关方法的时候,比如设置轴标签,还有一点需要区分的是,left对应的是y轴,zs对应的是x轴。(意思就是说,比如使用plt.xticks()方法,操作的是zs;而使用plt.yticks()方法则操作的是left轴。height对应着z轴。)
一段完整的代码示例如下:
import matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d.axes3d import Axes3Dimport numpy as npplt.rcParams['axes.unicode_minus'] = Falseplt.rcParams['axes.facecolor'] = '#cc00ff'plt.rcParams['font.sans-serif'] = ['STKAITI']# 创建画布fig = plt.figure()# 创建3D坐标系axes3d = Axes3D(fig)zs = range(5)left = np.arange(0, 10)height = np.array([])for i in range(len(zs)):z = zs[i]np.random.seed(i)height = np.random.randint(0, 30, size=10)axes3d.bar(left, height, zs=z, zdir='x',color=['red', 'green', 'purple', 'yellow', 'blue', 'black', 'gray', 'orange', 'pink', 'cyan'])plt.xticks(zs, ['1月份', '2月份', '3月份', '4月份', '5月份'])plt.yticks(left, ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'G'])plt.xlabel('月份')plt.ylabel('型号')plt.show()
图像效果如下:
文章图片
2. 绘制3D曲面图
示例1
绘制曲面图使用的是plot_surface()方法,这个方法的参数相对而言更简单。且X、Y、Z三者的顺序相对较为容易分辨。
通过读示例代码,即可快速掌握其用法:
import matplotlib.pyplot as pltimport numpy as npfrom mpl_toolkits.mplot3d import Axes3Dplt.rcParams['font.sans-serif'] = ['STKAITI']plt.rcParams['axes.unicode_minus'] = Falseplt.rcParams['axes.facecolor'] = '#cc00ff'fig = plt.figure(figsize=(10, 8), facecolor='#cc00ff')ax = Axes3D(fig)delta = 0.125# 生成代表X轴数据的列表x = np.arange(-4.0, 4.0, delta)# 生成代表Y轴数据的列表y = np.arange(-3.0, 4.0, delta)# 对x、y数据执行网格化X, Y = np.meshgrid(x, y)Z1 = np.exp(-X**2 - Y**2)Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)# 计算Z轴数据(高度数据)Z = (Z1 - Z2) * 2# 绘制3D图形ax.plot_surface(X, Y, Z,rstride=1,# rstride(row)指定行的跨度cstride=1,# cstride(column)指定列的跨度cmap=plt.get_cmap('rainbow'))# 设置颜色映射plt.xlabel('X轴', fontsize=15)plt.ylabel('Y轴', fontsize=15)ax.set_zlabel('Z轴', fontsize=15)ax.set_title('《曲面图》', y=1.02, fontsize=25, color='gold')# 设置Z轴范围ax.set_zlim(-2, 2)plt.show()
文章图片
示例2
更换一组数据,呈现的则是另一种艺术效果:
import matplotlib.pyplot as pltimport numpy as npfrom mpl_toolkits.mplot3d import Axes3Dplt.rcParams['font.sans-serif'] = ['STKAITI']plt.rcParams['axes.unicode_minus'] = Falseplt.rcParams['axes.facecolor'] = '#cc00ff'fig = plt.figure(figsize=(12, 10), facecolor='#cc00ff')ax = Axes3D(fig)delta = 0.125# 生成代表X轴数据的列表x = np.linspace(-2, 2, 10)# 生成代表Y轴数据的列表y = np.linspace(-2, 2, 10)# 对x、y数据执行网格化X, Y = np.meshgrid(x, y)# 计算Z轴数据(高度数据)Z = X**2 - Y**2# 绘制3D图形ax.plot_surface(X, Y, Z,rstride=1,# rstride(row)指定行的跨度cstride=1,# cstride(column)指定列的跨度cmap=plt.get_cmap('rainbow'))# 设置颜色映射plt.xlabel('X轴', fontsize=15)plt.ylabel('Y轴', fontsize=15)ax.set_zlabel('Z轴', fontsize=15)ax.set_title('《曲面图》', y=1.02, fontsize=25, color='gold')plt.show()
文章图片
3.绘制3D散点图 在3D曲面图示例1的基础上稍作修改。
绘制散点图使用scatter()方法,将散点颜色设置为绿色,红色边沿。
代码示例如下:
import matplotlib.pyplot as pltimport numpy as npfrom mpl_toolkits.mplot3d import Axes3Dplt.rcParams['font.sans-serif'] = ['STKAITI']plt.rcParams['axes.unicode_minus'] = Falseplt.rcParams['axes.facecolor'] = '#cc00ff'fig = plt.figure(figsize=(10, 8), facecolor='#cc00ff')ax = Axes3D(fig)delta = 0.125# 生成代表X轴数据的列表x = np.arange(-4.0, 4.0, delta)# 生成代表Y轴数据的列表y = np.arange(-3.0, 4.0, delta)# 对x、y数据执行网格化X, Y = np.meshgrid(x, y)Z1 = np.exp(-X**2 - Y**2)Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)# 计算Z轴数据(高度数据)Z = (Z1 - Z2) * 2# 绘制3D图形ax.scatter(X, Y, Z,c='green',edgecolors='red')plt.xlabel('X轴', fontsize=15)plt.ylabel('Y轴', fontsize=15)ax.set_zlabel('Z轴', fontsize=15)ax.set_title('《散点图》', y=1.02, fontsize=25, color='gold')# 设置Z轴范围ax.set_zlim(-2, 2)plt.show()
绘图效果如下:
文章图片
4. 绘制3D曲线图 绘制曲线图,使用的则是我们最最最熟悉的plot()方法。
其他部分基本不变,数据部分生成三组适合我们绘图的数据,线条为金色,宽度设定为3.
代码如下:
import matplotlib.pyplot as pltimport numpy as npfrom mpl_toolkits.mplot3d import Axes3Dplt.rcParams['font.sans-serif'] = ['STKAITI']plt.rcParams['axes.unicode_minus'] = Falseplt.rcParams['axes.facecolor'] = '#cc00ff'fig = plt.figure(figsize=(10, 8), facecolor='#cc00ff')ax = Axes3D(fig)theta = np.linspace(0, 3.14*10, 1000)r = np.linspace(0, 1, 1000)x = r * np.cos(theta)y = r * np.sin(theta)z = np.linspace(0, 4, 1000)ax.plot(x, y, z, color='gold', lw=3)plt.xlabel('X轴', fontsize=15)plt.ylabel('Y轴', fontsize=15)ax.set_zlabel('Z轴', fontsize=15)ax.set_title('《曲线图》', y=1.02, fontsize=25, color='gold')plt.show()
图像效果如下:
文章图片
【Python+Matplotlib绘制3D图像的示例详解】以上就是Python+Matplotlib绘制3D图像的示例详解的详细内容,更多关于Python Matplotlib 3D图像的资料请关注脚本之家其它相关文章!
推荐阅读
- Word 2007:自选图形的绘制技巧_Word专区
- Word2007神奇技巧:图片倒影效果的绘制_Word专区
- Android图表库MPAndroidChart——条形图的绘制过程过程,隐隐约约我看到了套路
- Word2007表格:绘制斜线表头及样式_Word专区
- 在Word2010中表格的绘制窍门_Word专区
- Android 图像选取 图片剪裁 照相选图 照相裁剪 大全 6-19更新
- android 图像的一些操作处理
- Android群英传笔记系列二view的绘制
- Excel 2007绘制甘特图查看项目安排情况_Excel专区
- python用circle画多边形_python-opencv-圆、椭圆与任意多边形的绘制