Python Matplotlib实现三维数据的散点图绘制
作者:清水寺种辣椒 发布时间:2021-01-30 09:45:19
一、背景
近期项目即将开展,计划第一步就是实现数据的可视化,所以先学习一下数据展示相关Demo。选用Python2.7与Matplotlib来实现,平台采用Pycharm,值得一提的是,Matplotlib的安装前首先要安装Numpy包,但是在完成Numpy的安装之后,楼主不能在PyCharm平台下进行自动安装,或者CMD中使用类似pip install Matplotlib,参考网上解决方案后采用直接去官网下载相应的安装包直接运行安装到相关目录下。在此就不赘述了。
二、 参考
Python语言相对于其他语言对新手较为友好,不用花费太多时间进行语法学习,但是在实际使用的过程中,因为Python中包含有大量的包与资源,在做项目时,对于功能的堆积,实际上Python语言对于新手并不易于理解。相对于Java与C++是需要开发者从底层搭建,可能更易于理解修改(个人意见)。
三、实现过程
其中就有我们需要参考的部分,也就是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()
样例的运行结果大致如下:
首先样例的数据来自于随机数的产生,但是在我实际使用的过程中,数据是需要预先存储与导入的。因此我添加数据导入部分:
import scipy.io as sio
#get the data form F:\matlab.mat
data = sio.loadmat('F:\matlab.mat')
m = data['data']
值得一提的是这只是我测试的数据,在实际应用过程中,数据的格式是多种多样的,所以需要做数据格式转化的模块。同时采用.mat数据的格式,用户可以用matlab打开,并对数据进行更改之类的操作。采用这种方法导入后,会自动形成数组。
如上图所示,是数据在matlab中打开的形式,因为我们需要画出三维散点图,会自动产生3×60的数组,每行代表每一维的数据。贴一张做出的Demo的成果图:
因为我是用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柱状图的绘制与显示将会尽快整理。
来源:https://blog.csdn.net/ChenHaoUESTC/article/details/76853111
猜你喜欢
- 前言:自增列可使用 auto_increment 来实现,当一个列被标识为 auto_increment 之后,在添加时如果不给此列设置任何
- 本文实例讲述了php遍历CSV类。分享给大家供大家参考。具体如下:<?phpclass CSVIterator implements
- MySQL中涉及的几个字符集 character-set-server/default-character-set:服务器字符集,默认情况下
- 下面步骤展示的是如何经过VirtualBox管理器,使得pycharm和ubuntu中的项目环境连接对应起来!如果你有属于自己的服务器,核心
- 准备工作去年的时候,青云发表过关于栅格系统的文章 . 我们知道网页的栅格系统是运用固定的格子设计版面布局,使其风格工整简洁. 视觉上来说,栅
- return 语句就是讲结果返回到调用的地方,并把程序的控制权一起返回程序运行到所遇到的第一个return即返回(退出def块),不会再运行
- 本文实例讲述了python多重继承用法,分享给大家供大家参考。具体实现方法如下:1.mro.py文件如下:#!/usr/bin/python
- 1.安装Apache 在终端中输入下面的命令就可以安装Apache了:sudo yum install httpdsudo的意思是
- 忙活了三个多小时,连学带做,总算是搞出来了一个具有基本功能的串口通信PC机的GUI界面,Tkinter在python中确实很好用,而且代码量
- jQuery传递中文参数乱码,原因是默认的传递方式没有采用UTF-8,所有我们可以在传递参数的时候对参数进行编码,然后再操作,代码如下,红色
- 文中给大家介绍MySQL 字符串截取相关函数,具体内容如下所示:在工作中,可能需要将某些字段按某个分割符组成一个字符串作为字段值存取到数据库
- 新建项目如下图,比如sigma目录是我要上传的项目,在six-sigma目录下新建三个文件,分别是LICENSE也就是开源协议,README
- 如下所示://动态删除select中的所有options: function delAllOptions(){&nb
- 本文实例讲述了微信小程序实现图片上传、删除和预览功能的方法。分享给大家供大家参考,具体如下:这里主要介绍一下微信小程序的图片上传图片删除和图
- 简介pandas按条件筛选数据时,除了使用query()方法,还可以使用isin和对isin取反进行条件筛选.代码 import panda
- 如下所示:# coding=utf-8import signalimport timedef set_timeout(num, callba
- 本文实例为大家分享了js实现鼠标切换图片的具体代码,供大家参考,具体内容如下实现效果,可以利用鼠标移动在对应的小点点上,或者点击左右两侧的箭
- 引言对 axios 二次封装,更加的可配置化、扩展性更加强大灵活通过 class 类实现,class 具备更强封装性(封装、继承、多态),通
- #!/usr/bin/env python# -*- coding: utf-8 -*-# @File : 自实现一个线性回归.py# @A
- Function ChkInvaildWord(Words) Const InvaildWords=&quo