Python Matplotlib实现三维数据的散点图绘制


Posted in Python onMarch 19, 2019

一、背景

近期项目即将开展,计划第一步就是实现数据的可视化,所以先学习一下数据展示相关Demo。选用Python2.7与Matplotlib来实现,平台采用Pycharm,值得一提的是,Matplotlib的安装前首先要安装Numpy包,但是在完成Numpy的安装之后,楼主不能在PyCharm平台下进行自动安装,或者CMD中使用类似pip install Matplotlib,参考网上解决方案后采用直接去官网下载相应的安装包直接运行安装到相关目录下。在此就不赘述了。

二、 参考

Python语言相对于其他语言对新手较为友好,不用花费太多时间进行语法学习,但是在实际使用的过程中,因为Python中包含有大量的包与资源,在做项目时,对于功能的堆积,实际上Python语言对于新手并不易于理解。相对于Java与C++是需要开发者从底层搭建,可能更易于理解修改(个人意见)。

Python Matplotlib实现三维数据的散点图绘制

三、实现过程

其中就有我们需要参考的部分,也就是mplot3d example code : 2dcollections3d_demo.py。下面贴出其中的代码段。

"""
=======================
Plot 2D data on 3D plot
=======================

Demonstrates using ax.plot's zdir keyword to plot 2D data on
selective axes of a 3D plot.
"""

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

fig = plt.figure()
ax = fig.gca(projection='3d')

# Plot a sin curve using the x and y axes.
x = np.linspace(0, 1, 100)
y = np.sin(x * 2 * np.pi) / 2 + 0.5
ax.plot(x, y, zs=0, zdir='z', label='curve in (x,y)')

# Plot scatterplot data (20 2D points per colour) on the x and z axes.
colors = ('r', 'g', 'b', 'k')
x = np.random.sample(20*len(colors))
y = np.random.sample(20*len(colors))
c_list = []
for c in colors:
 c_list.append([c]*20)
# By using zdir='y', the y value of these points is fixed to the zs value 0
# and the (x,y) points are plotted on the x and z axes.
ax.scatter(x, y, zs=0, zdir='y', c=c_list, label='points in (x,z)')

# Make legend, set axes limits and labels
ax.legend()
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)
ax.set_zlim(0, 1)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

# Customize the view angle so it's easier to see that the scatter points lie
# on the plane y=0
ax.view_init(elev=20., azim=-35)

plt.show()

样例的运行结果大致如下:

Python Matplotlib实现三维数据的散点图绘制

首先样例的数据来自于随机数的产生,但是在我实际使用的过程中,数据是需要预先存储与导入的。因此我添加数据导入部分:

import scipy.io as sio
#get the data form F:\matlab.mat
data = sio.loadmat('F:\matlab.mat')
m = data['data']

值得一提的是这只是我测试的数据,在实际应用过程中,数据的格式是多种多样的,所以需要做数据格式转化的模块。同时采用.mat数据的格式,用户可以用matlab打开,并对数据进行更改之类的操作。采用这种方法导入后,会自动形成数组。

Python Matplotlib实现三维数据的散点图绘制

如上图所示,是数据在matlab中打开的形式,因为我们需要画出三维散点图,会自动产生3×60的数组,每行代表每一维的数据。贴一张做出的Demo的成果图:

Python Matplotlib实现三维数据的散点图绘制

Python Matplotlib实现三维数据的散点图绘制

因为我是用Time变量做为Xlabel,同时模拟数据是等时间间距进行采样的,同时想要在不同的时间点采用不同的颜色。因此需要对ax.scatter(x,y,z,c)中的c变量进行更改,可以用变量代替,这样就可以用个循环结构实现颜色的切换功能。

for a in x:
 if a == 0.1:
  C.append('c')
 elif a == 0.2:
  C.append('r')
 elif a == 0.3:
  C.append('y')
 elif a == 0.4:
  C.append('k')
ax.scatter(x, y, z, c=C)

颜色切换部分代码如下:

import scipy.io as sio
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

def Singleplot():
 data = sio.loadmat('F:\matlab.mat')
 m = data['data']

 x = m[0]
 y = m[1]
 z = m[2]

 C = []
 ax = plt.subplot(111, projection='3d')

 for a in x:
 if a == 0.1:
  C.append('c')
 elif a == 0.2:
  C.append('r')
 elif a == 0.3:
  C.append('y')
 elif a == 0.4:
  C.append('k')

 ax.scatter(x, y, z, c=C)

 ax.set_xlabel('Time')
 ax.set_ylabel('Frequence')
 ax.set_zlabel('Amplitude')

 plt.show()

singleplot()

需要注意的是Python是属于相对集成度较高的语言,之所以方便使用,是因为存在许多大牛已经完成底层的内容,开发者只需要遵从下载的包中的使用规则,因此过程中对于许多函数不懂的地方,可以用Pycharm的Go to和Declaration功能进入申明区,并且可以从中看到函数的整体介绍,使用语法以及example。因此其中的功能较为有限,如果在短时间内用Python做项目可能对于新手来说,由上到下的形式可能较为简易,但是对于个性化定制功能的话还有待探究。

第一篇博客。记录一下,本周将学习Logistic回归预测,以及部分TensorFlow的原理与Demo,卡尔曼滤波,和一点数据融合算法。该篇属于数据可视化,还会有3D柱状图的绘制与显示将会尽快整理。

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

Python 相关文章推荐
Python3基础之输入和输出实例分析
Aug 18 Python
python判断字符串是否纯数字的方法
Nov 19 Python
使用基于Python的Tornado框架的HTTP客户端的教程
Apr 24 Python
详解Django中Request对象的相关用法
Jul 17 Python
Python验证企业工商注册码
Oct 25 Python
对numpy中数组转置的求解以及向量内积计算方法
Oct 31 Python
scrapy-redis的安装部署步骤讲解
Feb 27 Python
python实现批量视频分帧、保存视频帧
May 31 Python
Python pip 常用命令汇总
Oct 19 Python
使用PyCharm官方中文语言包汉化PyCharm
Nov 18 Python
如何利用python正则表达式匹配版本信息
Dec 09 Python
Python中的 enumerate和zip详情
May 30 Python
浅谈python中get pass用法
Mar 19 #Python
使用matplotlib中scatter方法画散点图
Mar 19 #Python
详解django+django-celery+celery的整合实战
Mar 19 #Python
详解Python正则表达式re模块
Mar 19 #Python
python matplotlib画图库学习绘制常用的图
Mar 19 #Python
详解python的四种内置数据结构
Mar 19 #Python
python3使用matplotlib绘制条形图
Mar 25 #Python
You might like
自制汽车收音机天线:收听广播的技巧和方法
2021/03/02 无线电
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
2013/08/13 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
2013/11/11 PHP
php实现的ping端口函数实例
2014/11/12 PHP
php操作xml入门之cdata区段
2015/01/23 PHP
在WordPress的文章编辑器中设置默认内容的方法
2015/12/29 PHP
基于thinkPHP实现的微信自定义分享功能示例
2016/09/23 PHP
PHP培训要多少钱
2017/06/06 PHP
Jquery Change与bind事件代码
2011/09/29 Javascript
关于jQuery object and DOM element
2013/04/15 Javascript
Js制作简单弹出层DIV在页面居中 中间显示遮罩的具体方法
2013/08/08 Javascript
JS:window.onload的使用介绍
2013/11/13 Javascript
AngularJS入门教程之表单校验用法示例
2016/11/02 Javascript
详解JavaScript基础知识(JSON、Function对象、原型、引用类型)
2018/01/16 Javascript
详解Vue结合后台的列表增删改案例
2018/08/21 Javascript
详解Vue CLI3配置之filenameHashing使用和源码设计使用和源码设计
2018/08/31 Javascript
详解vue-cli 3.0 build包太大导致首屏过长的解决方案
2018/11/10 Javascript
layui固定下拉框的显示条数(有滚动条)的方法
2019/09/10 Javascript
[39:11]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第二局
2016/02/28 DOTA
[01:00:11]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第一场 2月7日
2021/03/11 DOTA
Selenium鼠标与键盘事件常用操作方法示例
2018/08/13 Python
Python实现的简单计算器功能详解
2018/08/25 Python
Tensorflow使用支持向量机拟合线性回归
2018/09/07 Python
让代码变得更易维护的7个Python库
2018/10/09 Python
Python实现的微信支付方式总结【三种方式】
2019/04/13 Python
Python爬虫实现“盗取”微信好友信息的方法分析
2019/09/16 Python
通过实例解析python and和or使用方法
2020/11/14 Python
python链表类中获取元素实例方法
2021/02/23 Python
CSS3实现点击放大的动画实例代码
2017/02/27 HTML / CSS
深入浅析HTML5中的SVG
2015/11/27 HTML / CSS
查环查孕证明
2014/01/10 职场文书
管理提升方案
2014/06/04 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
学校运动会广播稿100条
2014/09/14 职场文书
先进个人事迹材料(2016推荐版)
2016/03/01 职场文书
《总之就是很可爱》新作短篇动画《总之就是很可爱~制服~》将于2022年夏天播出
2022/04/07 日漫