可视化篇(二)———使用matplotlib绘制常用3D图形及案例

  • 摘要
  • (一)添加matplotlib 3D模块
  • (二)3d图中绘制曲线
  • (三)3d图中绘制散点图
  • (四)3d图中绘制线框图
  • (五)3d图中绘制曲面图
  • (六)3d图中绘制三角表面图
  • (七)3d图中绘制等高线
  • (八)3d图中绘制条形图

摘要

本文通过学习matplotlib绘制3d图形的官方文档,总结了常用的3d图形,以及针对每类图形,通过一个小案例进行可视化。
官方文档

(一)添加matplotlib 3D模块

从工具箱中导入绘制3D图所需要的坐标轴模块

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

绘制子图添加坐标轴时先申明绘制的类型为:3D (使用projection = "3d"进行申明)

# 绘制子图添加坐标轴时先申明绘制的类型为:3D  (使用projection = "3d"进行申明)
fig = plt.figure()
ax = fig.add_subplot(1,1,1,projection = "3d")

(二)3d图中绘制曲线

1、在3d坐标轴对象下使用plot方法
2、其余参数同2d图。

# ************* 3d图中绘制曲线 *************
# 在3d坐标轴对象下使用plot方法
import numpy as np
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1,projection = "3d")
x = np.linspace(-10,10,100)
y = np.linspace(-10,10,100)
z = x**10 + y**3
ax1.plot(x,y,z,label = "3d curve") #  其余参数同2d图
ax1.legend()
plt.show()

(三)3d图中绘制散点图

1、在3d坐标轴对象下使用scatter方法
2、zdir为指定z轴方向,其余参数同2d绘图。

# ****************** 3d图中绘制散点图 ******************
# 在3d坐标轴对象下使用scatter方法
from mpl_toolkits.mplot3d import Axes3D
import  matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1,projection = "3d")
from sklearn.datasets import make_blobs
data = make_blobs(n_samples = 100,n_features = 3,cluster_std = 2)
x = data[0][:,0]
z = data[0][:,1]
y = data[0][:,2]
label = data[1]
colors = ""
for i in range(100):if label[i] == 0:colors += "r"elif label[i] == 1:colors += "g"else:colors += "b"
ax1.scatter(x,y,z,zdir = "z",c = colors) # zdir为指定z轴方向,其余参数同2d绘图
ax1.set_xlabel("x")
ax1.set_xlabel("y")
ax1.set_xlabel("z")

(四)3d图中绘制线框图

1、在3d坐标轴对象下使用plot_wireframe方法。
2、Axes3D写作axes3d也可以
3、X和Y需要是二维数组
4、rcount:为沿行方向绘制网格的数目,
ccount:为沿列方向绘制网格的数目。

# ****************** 3d图中绘制线框图 ******************
# 在3d坐标轴对象下使用plot_wireframe方法
from mpl_toolkits.mplot3d import axes3d # Axes3D写作axes3d也可以
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(figsize=(16,8))
ax1 = fig.add_subplot(1,1,1,projection = "3d")
x = np.linspace(-5,5,1000)
y = np.linspace(-5,5,1000)
X,Y = np.meshgrid(x,y) # X和Y需要是二维数组
Z = np.sin(np.sqrt(X**2+Y**2))
ax1.plot_wireframe(X,Y,Z,rcount = 15,ccount = 15) # rcount:为沿行方向绘制网格的数目,ccount:为沿列方向绘制网格的数目,
plt.show()

(五)3d图中绘制曲面图

1、在3d坐标轴对象下使用plot_surface方法。
2、rcount:为沿行方向绘制网格的数目
ccount:为沿列方向绘制网格的数目
cmap:设定配色板(可直接调用matplotlib.cm中的配色板,如autumn,autumn_r,coolwarm等等)
color:设定颜色

# ****************** 3d图中绘制曲面图 ******************
# 在3d坐标轴对象下使用plot_surface方法
from mpl_toolkits.mplot3d import axes3d # Axes3D写作axes3d也可以
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np
fig = plt.figure(figsize=(16,8))
ax1 = fig.add_subplot(1,1,1,projection = "3d")
x = np.linspace(-5,5,1000)
y = np.linspace(-5,5,1000)
X,Y = np.meshgrid(x,y) # X和Y需要是二维数组
Z = np.sin(np.sqrt(X**2+Y**2))surf = ax1.plot_surface(X, Y, Z, cmap=cm.autumn)
"""
其余参数:
rcount:为沿行方向绘制网格的数目
ccount:为沿列方向绘制网格的数目
cmap:设定配色板(可直接调用matplotlib.cm中的配色板,如autumn,autumn_r,coolwarm等等)
color:设定颜色"""fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()

(六)3d图中绘制三角表面图

1、 在3d坐标轴对象下使用plot_trisurf方法。
2、以绘制莫比乌斯带为列。

# ****************** 3d图中绘制三角表面图 ******************
# 在3d坐标轴对象下使用plot_trisurf方法
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm
import matplotlib.tri as mtri
# 以绘制莫比乌斯带为列fig = plt.figure()
ax1 = fig.add_subplot(1, 1, 1, projection='3d')x = np.linspace(0, 2*np.pi,100)
y = np.linspace(-0.5, 0.5,20)
x,y = np.meshgrid(x,y)
# 将二维数组准换为一维数组
x = x.flatten()
y = y.flatten()# 通过莫比乌斯映射,把x,y转化为X,Y,Z
X = (1 + 0.5 * y * np.cos(x / 2.0)) * np.cos(x)
Y = (1 + 0.5 * y * np.cos(x / 2.0)) * np.sin(x)
Z = 0.5 * y * np.sin(x / 2.0)tri = mtri.Triangulation(x, y)ax1.plot_trisurf(X, Y, Z, triangles=tri.triangles, cmap=cm.coolwarm)
ax1.set_zlim(-0.5, 0.5)plt.show()

(七)3d图中绘制等高线

1、 在3d坐标轴对象下使用contour方法
2、绘制填充的等高线,使用contourf方法
3、zdir:选定投影方向。
offset:选定投影方向的投影位置。

# ****************** 3d图中绘制等高线 ******************
# 在3d坐标轴对象下使用contour方法
# 绘制填充的等高线,使用contourf方法from mpl_toolkits.mplot3d import axes3d # Axes3D写作axes3d也可以
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np
fig = plt.figure(figsize=(16,16))# contour方法ax1 = fig.add_subplot(2,1,1,projection = "3d")
x = np.linspace(-5,5,1000)
y = np.linspace(-5,5,1000)
X,Y = np.meshgrid(x,y) # X和Y需要是二维数组
Z = np.sin(np.sqrt(X**2+Y**2))surf = ax1.plot_surface(X, Y, Z,alpha = 0.3)
ax1.contour(X, Y, Z, zdir='z', offset=-1.5, cmap=cm.coolwarm)
ax1.contour(X, Y, Z, zdir='x', offset=-7, cmap=cm.coolwarm)
ax1.contour(X, Y, Z, zdir='y', offset=7, cmap=cm.coolwarm)
"""
zdir:选定投影方向
offset:选定投影方向的投影位置"""
ax1.set_xlabel('X')
ax1.set_xlim(-7, 7)
ax1.set_ylabel('Y')
ax1.set_ylim(-7, 7)
ax1.set_zlabel('Z')
ax1.set_zlim(-1.5, 1.5)# contourf方法
ax2 = fig.add_subplot(2,1,2,projection = "3d")surf = ax2.plot_surface(X, Y, Z,alpha = 0.3)
ax2.contourf(X, Y, Z, zdir='z', offset=-1.5, cmap=cm.coolwarm)
ax2.contourf(X, Y, Z, zdir='x', offset=-7, cmap=cm.coolwarm)
ax2.contourf(X, Y, Z, zdir='y', offset=7, cmap=cm.coolwarm)
"""
zdir:选定投影方向
offset:选定投影方向的投影位置"""
ax2.set_xlabel('X')
ax2.set_xlim(-7, 7)
ax2.set_ylabel('Y')
ax2.set_ylim(-7, 7)
ax2.set_zlabel('Z')
ax2.set_zlim(-1.5, 1.5)plt.show()

contour方法图形(等高线不填充):

contourf方法图形(等高线填充):

(八)3d图中绘制条形图

1、 在3d坐标轴对象下使用bar方法
2、 left:表示条形图的横轴
height:表示条形图的纵轴
zdir:多组条形图的排列方向,即哪个轴
zs:多组条形图在排列方向上的位置

# ****************** 3d图中绘制条形图 ******************
# 在3d坐标轴对象下使用bar方法
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as npfig = plt.figure(figsize=(16,16))
ax1 = fig.add_subplot(2,1,1,projection = "3d")
np.random.seed(10)
for color,z in zip(["r","g","b","k","y"],[0,10,20,30,40]):x = np.arange(10)y = np.abs(np.random.randn(10))ax1.bar(left = x,height = y,zs = z,zdir = "z",color = color)"""left:表示条形图的横轴height:表示条形图的纵轴zdir:多组条形图的排列方向,即哪个轴zs:多组条形图在排列方向上的位置"""
# 由此可知沿y轴排列会较为美观
ax2 = fig.add_subplot(2,1,2,projection = "3d")
for color,z in zip(["r","g","b","k","y"],[0,10,20,30,40]):x = np.arange(10)y = np.abs(np.random.randn(10))ax2.bar(left = x,height = y,zs = z,zdir = "y",color = color)"""left:表示条形图的横轴height:表示条形图的纵轴zdir:多组条形图的排列方向,即哪个轴zs:多组条形图在排列方向上的位置"""
ax1.set_xlabel("x",size = 20)
ax2.set_xlabel("x",size = 20)
ax1.set_ylabel("y",size = 20)
ax2.set_ylabel("y",size = 20)
ax1.set_zlabel("z",size = 20)
ax2.set_zlabel("z",size = 20)plt.show()

沿z轴排列图形:

沿y轴排列图形:(更为美观)

by CyrusMay 2020 05 07

你是一种感觉
写在夏夜晚风里面
——————五月天(疯狂世界)——————

可视化篇(二)———使用matplotlib绘制常用3D图形及案例相关推荐

  1. matplotlib绘制两个图形及网格、透明度、图例、颜色等

    ZCQ 下面的实例展示了matplotlib绘制两个图形及网格.透明度.图例.颜色等的基本操作 上代码 #比较自己和同桌历次考试得优的门数 from matplotlib import pyplot ...

  2. Python之matplotlib:利用matplotlib绘制八象空间三维图案例(知识点包括散点图、折线图、标注文字、图例、三维坐标)之详细攻略

    Python之matplotlib:利用matplotlib绘制八象空间三维图案例(知识点包括散点图.折线图.标注文字.图例.三维坐标)之详细攻略 目录

  3. 《基于 DirectX11 的 3D 图形程序设计案例教程》学习四 D3DTriangle

    源程序:   此次例子的大部分代码均拷贝自上一章 InitD3D 例子程序.   d3dUtility.h /********************************************* ...

  4. 数据分析(二)之matplotlib绘制其他图形

    数据分析学习线路图 2.matplotlib绘制散点图 假设通过爬虫你获取到了北京2016年3,10月份每天白天的最高气温(分别位于列表a,b),那么此时如何寻找出气温和随时间(天)变化的某种规律? ...

  5. matplotlib绘制常用统计图

    matplotlib的pyplot子模块提供了和Matlab类似的绘图API,方便用户快速绘制2D图表.在绘图过程中,调用 figure 创建一个绘图对象,并且使它成为当前的绘图对象. 各种图展示功能 ...

  6. python如何画出多个独立的图片_在Python中用Matplotlib绘制多个图形并组合显示,利用,多图,合并,展示...

    有个需求就是利用Matplotlib画几个像模像样的统计图然后合并在一张图中,因为此前很少用这方面的东西,所以折腾了不少时间,今天介绍一下. 1.subplot多合一 其实,利用python 的mat ...

  7. Matplotlib绘制常用三维图

    目录 1 三维图像的绘制简介 2 三维线框图 3 三维曲面图 4 三维散点图 5 三维柱状图 6 三维折线图 1 三维图像的绘制简介 Matplotlib使用和绘制二维图表:https://blog. ...

  8. python绘制条形图 中文横坐标_[Python数据分析]二、matplotlib绘制条形图

    本节目标:绘制横着放的条形图 绘制竖着放的条形图 在同一图中,绘制多次条形图做对比 练习1 假设你获取到了2017年内地电影票房前20的电影(列表a)和电影票房数据(列表b),那么如何更加直观的展示该 ...

  9. 数据可视化第八章使用matplotlib绘制高级图表

    8.1 绘制等高线图 import numpy as np import matplotlib.pyplot as plt def calcu_elevation(x1, y1): h = (1-x1 ...

最新文章

  1. WritableComparable排序案例(区内排序)
  2. Android应用程序的组成部分和Manifest文件(转)
  3. jQuery常见的选择器操作运算符
  4. 截取图片生成头像插件
  5. hadoop hive集群_基于伪分布式Hadoop搭建Hive平台详细教程
  6. body onload 控制窗口大小 html,如何实现在调整浏览器窗口大小时缩放的网页?
  7. 玩转12306之系统登录
  8. UVa 201 Square
  9. 在Python3里有的变量前面有个*号,或许你不知道,没关系,看文
  10. webpack4.0各个击破(9)—— karma篇
  11. (101)FPGA面试题-Verilog设计偶校验位
  12. Python中通过cx_Oracle访问数据库遇到的问题总结
  13. 《疯狂的站长》读后感3
  14. 23个适合logo设计的常用英文字体
  15. Reg命令使用详解 批处理操作注册表必备
  16. 调色板的原理与显示模式
  17. Java基础23 网络编程 socket套接字流 TCP传输总结
  18. 欧洲模拟卡车2(TruckersMP EU)测试欧服连通率的脚本
  19. 【Linux】大数据开发中常用的shell命令
  20. 当当网商品详情API接口(当当商品详情接口,当当商品评论接口,当当商品问答接口,当当抢购价接口,关键词搜索当当网商品接口)代码对接教程

热门文章

  1. c语言程序设计橙皮,橙皮_中药词典C_中医中药网
  2. 电厂运维的cis数据_数据中心运维,太难难难了
  3. 德州寒流对IDC带来极大影响
  4. 干货|用配电安全基础知识及隐患排查重点PPT
  5. 精密空调内部培训资料
  6. 为什么要完成量子计算机,我们为啥要量子计算机?
  7. opencv android黑屏,装好了OpenCVManager,开启了Camera权限,在手机上CameraFaceDetectionView无图像...
  8. mysql 语句怎样修饰约束_MySQL中的约束,添加约束,删除约束,以及一些其他修饰讲解...
  9. mysql组件化_组件化开发和模块化开发概念辨析
  10. DL之PerceptronAdalineGD:基于iris莺尾花数据集利用Perceptron感知机和AdalineGD算法实现二分类