Python+Matplotlib绘制3D图像的示例详解

 更新时间:2022年04月14日 08:37:07   作者:侯小啾  
这篇文章主要为大家介绍了如何使用python matplotlib绘制绘制出一系列酷炫的3D图像,例如:3D散点图,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 plt
from mpl_toolkits.mplot3d.axes3d import Axes3D
import numpy as np
plt.rcParams['axes.unicode_minus'] = False
plt.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 plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams['font.sans-serif'] = ['STKAITI']
plt.rcParams['axes.unicode_minus'] = False
plt.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 plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams['font.sans-serif'] = ['STKAITI']
plt.rcParams['axes.unicode_minus'] = False
plt.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 plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams['font.sans-serif'] = ['STKAITI']
plt.rcParams['axes.unicode_minus'] = False
plt.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 plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams['font.sans-serif'] = ['STKAITI']
plt.rcParams['axes.unicode_minus'] = False
plt.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机器学习库scikit-learn使用详解

    Python机器学习库scikit-learn使用详解

    scikit-learn是Python中最流行的机器学习库之一,它提供了各种各样的机器学习算法和工具,包括分类、回归、聚类、降维等
    2023-03-03
  • 在FastAPI中改变响应状态码的两种方法

    在FastAPI中改变响应状态码的两种方法

    FastAPI,顾名思义,是一个快速、现代、高性能的web框架,用于用Python构建后端api,响应状态码是一个三位数,表示请求的结果,在这篇简明的基于示例的博文中,我将向你展示在FastAPI中更改响应状态代码的两种不同方法,需要的朋友可以参考下
    2025-02-02
  • 详解centos7+django+python3+mysql+阿里云部署项目全流程

    详解centos7+django+python3+mysql+阿里云部署项目全流程

    这篇文章主要介绍了详解centos7+django+python3+mysql+阿里云部署项目全流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • pycharm不在cmd中运行却在python控制台运行问题解决

    pycharm不在cmd中运行却在python控制台运行问题解决

    这篇文章主要介绍了pycharm不在cmd中运行却在python控制台运行问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 独特的python循环语句

    独特的python循环语句

    本文主要给大家介绍的是Python循环语句与其他编程语言中的循环语句不同的地方,非常的独特,有需要的小伙伴可以参考下
    2016-11-11
  • python 调用API接口 获取和解析 Json数据

    python 调用API接口 获取和解析 Json数据

    这篇文章主要介绍了python 如何调用API接口 获取和解析 Json数据,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-09-09
  • python中使用多线程改进flask案例

    python中使用多线程改进flask案例

    这篇文章主要介绍了使用多线程改进flask案例,线程是指进程内的一个执行单元,也是进程内的可调度实体.线程的划分尺度小于进程,使得多线程程序的并发性高,更多具体内容,需要的小伙伴可以参考下面文章相关资料,希望对你有所帮助
    2022-03-03
  • 超简单的scrapy实现ip动态代理与更换ip的方法实现

    超简单的scrapy实现ip动态代理与更换ip的方法实现

    这篇文章主要介绍了超简单的scrapy实现ip动态代理与更换ip的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Python 时间操作datetime详情

    Python 时间操作datetime详情

    这篇文章主要介绍了 Python 时间操作datetime,datetime 模块提供处理时间和日期的多种类,简单方便,下面文章将详细介绍其内容,需要的朋友可以参考一下
    2021-11-11
  • Python实现将MP4视频转化为GIF图像

    Python实现将MP4视频转化为GIF图像

    与静态图像相比,动态的 GIF 图片更能吸引各位读者的注意力,还可以提供更生动、有趣和引人入胜的内容,本文为大家介绍了Python将MP4视频转化为GIF图像的方法,需要的可以参考下
    2023-06-06

最新评论