前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Matplotlib轻松搞定3D绘图

使用Matplotlib轻松搞定3D绘图

作者头像
深度学习与Python
发布2019-06-18 20:56:46
3.8K0
发布2019-06-18 20:56:46
举报

数据可视化一直是机器学习的重要部分,大多数数据可视化教程的基本内容包括:散点图,线图,箱形图,条形图和热图,虽然这些对于数据预处理来说基本够用,但是今天给大家分享另一种数据可视化图形——3D可视化。3D图可以让我们更加直观的了解数据之间的关系: x - y , x - z和y - z 。在本文中,我将简单介绍使用Matplotlib进行3D数据可视化。

3D散点图和线图

matplotlib中提供3D画图库为mplot3d,在使用时,我们通过一个关键字projection="3d"即可创建3D坐标轴。具体代码如下:

代码语言:javascript
复制
  from mpl_toolkits import mplot3d 
  import numpy as np 
  import matplotlib.pyplot as plt 

  fig = plt.figure() 
  ax = plt.axes(projection =“3d”) 
  plt.show() 

创建3D坐标轴结果如下:

现在我们的轴已经创建好了,我们可以开始绘制3D。3D绘图库的用法与2D绘图基本一样。我们定义好x、y与z轴之间的数据关系即可,具体使用查看下边示例:

代码语言:javascript
复制
  fig = plt.figure() 
  ax = plt.axes(projection =“3d”) 
  z_line = np.linspace(0,15,1000) 
  x_line = np.cos(z_line) 
  y_line = np.sin(z_line) 
  ax.plot3D(x_line,y_line,z_line,'gray') 

  z_points = 15 * np.random.random(100) 
  x_points = np.cos(z_points)+ 0.1 * np.random.randn(100) 
  y_points = np.sin(z_points)+ 0.1 * np.random.randn(100) 
  ax.scatter3D(x_points,y_points,z_points,c = z_points,cmap ='hsv'); 

  plt.show() 

绘图结果为:

在绘制3D图形后,我们可以交互的查看图形。只需要简单点击并拖动绘图结果即可。

3D曲面图

曲面图可以很好地提供了一个完整的结构来查看每个变量的值如何在另外两个轴的轴上变化。在Matplotlib中构建表面图是一个3个步骤的过程。

一、我们需要生成构成曲面图的实际点。注意生成3D曲面的所有点是不可能的,因为它们有无限个!因此我们将生成能够表示曲面的部分点,然后再估计其余的点。

代码语言:javascript
复制
  fig = plt.figure() 
  ax = plt.axes(projection =“3d”) 
  def z_function(x,y): 
     return np.sin(np.sqrt(x ** 2 + y ** 2)) 

  x = np.linspace(-6,6,30) 
  y = np.linspace(-6,6,30) 
  X,Y = np.meshgrid(x,y) 
  Z = z_function(X,Y)

二、绘制线框,通过我们刚生成的点及关系式来绘制曲面图

代码语言:javascript
复制
  fig = plt.figure()
  ax = plt.axes(projection =“3d”) 
  ax.plot_wireframe(X,Y,Z,color ='green') 
  ax.set_xlabel('X') 
  ax.set_ylabel('y')
  ax.set_zlabel('Z') 

  plt.show() 

绘制结果为

最后,我们将曲面投影到线框估计上,并估计出其余的点。

代码语言:javascript
复制
  ax = plt.axes(projection ='3d')
  ax.plot_surface(X,Y,Z,rstride = 1,cstride = 1, 
  cmap ='winter',edgecolor ='none') 
  ax.set_title('曲面')

3D条形图

条形图是数据可视化中常用的一类图形,其能够以简单直观的方式反映出数据信息。 3D条形图的美妙之处在于它们保持了2D条形图的简单性,同时扩展了它们表示比较信息的能力。绘制条形图需要两个东西:位置和大小。 在3D条形图中,我们将选择z轴来表示高度; 因此,每个条形将从z = 0开始,其大小与我们试图可视化的值成比例。 x和y位置将表示横跨2D平面z = 0的条形坐标。我们将每个条形截面积都设置为1,使所有条形都具有相同的形状。下面为示例代码:

代码语言:javascript
复制
  fig = plt.figure() 
  ax = plt.axes(projection =“3d”) 

  num_bars = 15 
  x_pos = random.sample(xrange(20),num_bars) 
  y_pos = random.sample(xrange(20),num_bars) 
  z_pos = [0] * num_bars 
  x_size = np.ones(num_bars) 
  y_size = np.ones(num_bars) 
  z_size = random.sample(xrange(20),num_bars) 

  ax.bar3d(x_pos,y_pos,z_pos,x_size,y_size,z_size,color ='aqua') 
  plt.show() 

可视化结果为

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 深度学习与python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档