Matplotlib 也可以绘制 3D 图像,与二维图像不同的是,绘制三维图像主要通过 mplot3d 模块实现。但是,使用 Matplotlib 绘制三维图像实际上是在二维画布上展示,所以一般绘制三维图像时,同样需要载入 pyplot 模块。

mplot3d 模块下主要包含 4 个大类,分别是:

mpl_toolkits.mplot3d.axes3d()

mpl_toolkits.mplot3d.axis3d()

mpl_toolkits.mplot3d.art3d()

mpl_toolkits.mplot3d.proj3d()

其中,axes3d() 下面主要包含了各种实现绘图的类和方法。axis3d() 主要是包含了和坐标轴相关的类和方法。art3d() 包含了一些可将 2D 图像转换并用于 3D 绘制的类和方法。proj3d() 中包含一些零碎的类和方法,例如计算三维向量长度等。

一般情况下,我们用到最多的就是 mpl_toolkits.mplot3d.axes3d() 中的mpl_toolkits.mplot3d.axes3d.Axes3D() 类,而 Axes3D() 下面又存在绘制不同类型 3D 图的方法。你可以通过下面的方式导入 Axes3D()。

from mpl_toolkits.mplot3d.axes3d import Axes3D或from mpl_toolkits.mplot3d import Axes3D

三维散点图

首先,我们导入 numpy 随机生成一组数据。

import numpy as np

# x, y, z 均为 0 到 1 之间的 100 个随机数

x = np.random.normal(0, 1, 100)

y = np.random.normal(0, 1, 100)

z = np.random.normal(0, 1, 100)

接下来,开始绘图。第一步是载入 2D, 3D 绘图模块。

from mpl_toolkits.mplot3d import Axes3D

import matplotlib.pyplot as plt

第二步,使用 Axes3D() 创建 3D 图形对象。

fig = plt.figure()

ax = Axes3D(fig)

最后,调用散点图绘制方法绘图并显示出来。

ax.scatter(x, y, z)

plt.show()

三维线型图

线形图和散点图相似,需要传入 x, y, z 三个坐标的数值。详细的代码如下。

# 载入模块

from mpl_toolkits.mplot3d import Axes3D

import matplotlib.pyplot as plt

import numpy as np

# 生成数据

x = np.linspace(-6 * np.pi, 6 * np.pi, 1000)

y = np.sin(x)

z = np.cos(x)

# 创建 3D 图形对象

fig = plt.figure()

ax = Axes3D(fig)

# 绘制线型图

ax.plot(x, y, z)

# 显示图

plt.show()

三维柱状图

绘制完线型图,我们继续尝试绘制三维柱状图,其实它的绘制步骤和上面同样非常相似。

# 载入模块

from mpl_toolkits.mplot3d import Axes3D

import matplotlib.pyplot as plt

import numpy as np

# 创建 3D 图形对象

fig = plt.figure()

ax = Axes3D(fig)

# 生成数据并绘图

x = [0, 1, 2, 3, 4, 5, 6]

for i in x:

y = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

z = abs(np.random.normal(1, 10, 10))

ax.bar(y, z, i, zdir='y', color=['r', 'g', 'b', 'y'])

plt.show()

三维图曲面图

接下来需要绘制的三维曲面图要麻烦一些,我们需要对数据进行矩阵处理。其实和画二维等高线图很相似,只是多增加了一个维度。

# 载入模块

import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

# 创建 3D 图形对象

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)

Z = np.sqrt(X ** 2 + Y ** 2)

# 绘制曲面图,并使用 cmap 着色

ax.plot_surface(X, Y, Z, cmap=plt.cm.winter)

plt.show()

cmap=plt.cm.winter 表示采用了 winter 配色方案,也就是下图的渐变色。

混合图绘制

混合图就是将两种不同类型的图绘制在一张图里。绘制混合图一般有前提条件,那就是两种不同类型图的范围大致相同,否则将会出现严重的比例不协调,而使得混合图失去意义。

# -*- coding: utf-8 -*

# 载入模块

from mpl_toolkits.mplot3d import Axes3D

import numpy as np

import matplotlib.pyplot as plt

# 创建 3D 图形对象

fig = plt.figure()

ax = Axes3D(fig)

# 生成数据并绘制图 1

x1 = np.linspace(-3 * np.pi, 3 * np.pi, 500)

y1 = np.sin(x1)

ax.plot(x1, y1, zs=0, c='red')

# 生成数据并绘制图 2

x2 = np.random.normal(0, 1, 100)

y2 = np.random.normal(0, 1, 100)

z2 = np.random.normal(0, 1, 100)

ax.scatter(x2, y2, z2)

# 显示图

plt.show()

子图绘制

# -*- coding: utf-8 -*

# 载入模块

from mpl_toolkits.mplot3d import Axes3D

import matplotlib.pyplot as plt

import numpy as np

# 创建 1 张画布

fig = plt.figure()

#===============

# 向画布添加子图 1

ax1 = fig.add_subplot(1, 2, 1, projection='3d')

# 生成子图 1 数据

x = np.linspace(-6 * np.pi, 6 * np.pi, 1000)

y = np.sin(x)

z = np.cos(x)

# 绘制第 1 张图

ax1.plot(x, y, z)

#===============

# 向画布添加子图 2

ax2 = fig.add_subplot(1, 2, 2, projection='3d')

# 生成子图 2 数据

X = np.arange(-2, 2, 0.1)

Y = np.arange(-2, 2, 0.1)

X, Y = np.meshgrid(X, Y)

Z = np.sqrt(X ** 2 + Y ** 2)

# 绘制第 2 张图

ax2.plot_surface(X, Y, Z, cmap=plt.cm.winter)

# 显示图

plt.show()

我们可以来看一下这些代码。由于两张子图是绘制在 1 张画布上面的,所以这里需要提前创建 1 张画布。然后通过.add_subplot()添加子图,子图序号和二维绘图相似,只是注意 3D 绘图时要添加projection='3d'参数。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

本文标题: python中Matplotlib实现绘制3D图的示例代码

本文地址: http://www.cppcns.com/jiaoben/python/202569.html

python绘制三维曲面图-python中Matplotlib实现绘制3D图的示例代码相关推荐

  1. python 去重 字典_python按照list中字典的某key去重的示例代码

    一.需求说明 当我们写爬虫的时候,经常会遇到json格式的数据,它通常是如下结构: data = [{'name':'小K','score':100}, {'name':'小J','score':98 ...

  2. python3d动图_python中Matplotlib实现绘制3D图的示例代码

    Matplotlib 也可以绘制 3D 图像,与二维图像不同的是,绘制三维图像主要通过 mplot3d 模块实现.但是,使用 Matplotlib 绘制三维图像实际上是在二维画布上展示,所以一般绘制三 ...

  3. Python——根据散点数据绘制三维曲面图( meshgrid函数以及Axes3D [plot_surface] )

    1.初始散点数据处理成xy网格数据 import numpy as np x = np.arange(-2, 2, 0.025) y = np.arange(-2, 2, 0.025) x, y = ...

  4. Python中matplotlib默认绘制的条形图比较胖?如何设置成体型匀称的条形图,达到最佳的可视化效果。

    Python中matplotlib默认绘制的条形图比较胖?如何设置成体型匀称的条形图,达到最佳的可视化效果. #默认情形下的条形图 n_bars = len(x_labels)xval = np.ar ...

  5. Matlab来绘制三维曲面图、等高线图等

    文章目录 前言 一.Matlab插值 1.Meshgrid函数 2.Griddata函数 二.绘制 1.使用函数 (1)linspace函数 (2)peaks函数 (3)polt3函数 (4)mesh ...

  6. python画图颜色代码_python中matplotlib的颜色及线条控制的示例

    下次用python画图的时候选色选点都可以直接参考这边,牛逼!分享给大家,也给自己留个笔记. 参考网址: http://stackoverflow.com/questions/22408237/nam ...

  7. MATLAB绘制三维曲面图和等高线 绘图(2)

    绘制三维曲面图步骤: 1): 对数据进行处理,得到三维曲面上的点坐标组 方法有: 1.将自变量离散, x=xmin:dx:xmax y=ymin:dy:ymax 2.利用meshgrid 指令 生成 ...

  8. Matlab绘制三维曲面(以二维高斯函数为例)

    原文地址为: Matlab绘制三维曲面(以二维高斯函数为例) 寒假学习了一下Python下的NumPy和pymatlab,感觉不是很容易上手.来学校之后,决定继续看完数字图像处理一书.还是想按照上学期 ...

  9. MATLAB函数mesh与surf等绘制三维曲面入门

    一.引言 三维曲面在实际应用中被广泛使用,能够更好的展示三维空间中曲面,以实现三维数据的可视化. Matlab软件中可以使用mesh.fmesh.surf和fsurf等函数来实现三维曲面的绘图.其中m ...

最新文章

  1. C++对C的改进(1)
  2. Boost:易变的bimap双图的测试程序
  3. 7.4.1 矩阵低秩近似、矩阵范数
  4. 硬件:LCD和LED相关知识介绍
  5. 文档类型定义和合法性(2)
  6. UNIX(进程间通信):05---守护进程
  7. 数据库基础知识——DQL语言(一)
  8. 通过jQuery设置全局Ajax加载时呈现Loading
  9. 小米蓝牙耳机不能串联问题解决
  10. 【Grafana】通过阿里云日志服务监控Nginx访问日志显示统计信息
  11. 更改matlab快捷键 matlab 复制粘贴键不对
  12. 锐意创新,引领音视频未来
  13. DXP中关于PCB及原理绘制那些高级玩意总结
  14. 【Java】IO流 - 节点流和处理流【Buffered】
  15. 软件开发平台之争:NET VS Java,谁是更好的选择?
  16. web前端——工作中遇到的问题总结
  17. Python线程 一
  18. 6688.COM CEO 王峻涛致贺洪涛软件成立
  19. 51单片机控制DHT11温湿度传感器,并使用OLED屏幕显示
  20. SSD1306双内存驱动

热门文章

  1. EF框架对数据库的操作
  2. Android NDK JNI开发3
  3. Google Map API 学习六-设置infoWindow的长宽
  4. 从一生的角度看程序员的学习和发展
  5. 使用Cucumber+Rspec玩转BDD(7)——测试重构
  6. Visual studio 2010 sp1中文版正式版无法安装Silverlight5_Tools rc1 的解决办法
  7. 对 VR 项目开发流程的调研
  8. react编译器jsxTransformer,babel
  9. ASIHTTPRequest取消异步请求
  10. 【转】ASP.NET AJAX入门系列