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

 更新时间:2022年04月21日 12:24:07   作者:清水寺种辣椒  
这篇文章主要为大家详细介绍了Python Matplotlib实现三维数据的散点图绘制,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

一、背景

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

二、 参考

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

Matplotlib的gallery部分

三、实现过程

其中就有我们需要参考的部分,也就是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柱状图的绘制与显示将会尽快整理。

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

相关文章

  • Python ckeditor富文本编辑器代码实例解析

    Python ckeditor富文本编辑器代码实例解析

    这篇文章主要介绍了Python ckeditor富文本编辑器代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Python3 伪装浏览器的方法示例

    Python3 伪装浏览器的方法示例

    本篇文章主要介绍了Python3 伪装浏览器的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Python 16进制与中文相互转换的实现方法

    Python 16进制与中文相互转换的实现方法

    今天小编就为大家分享一篇Python 16进制与中文相互转换的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python 高级专用类方法的实例详解

    Python 高级专用类方法的实例详解

    这篇文章主要介绍了Python 高级专用类方法的实例详解的相关资料,希望通过本文大家能够掌握这部分内容,需要的朋友可以参考下
    2017-09-09
  • 从0编写区块链之用python解释区块链最基本原理

    从0编写区块链之用python解释区块链最基本原理

    人工智能和区块链诞生至今已经有了十几年,当这些技术出现时,人们都说他们会改变世界,但至今为止,这两项技术对现实的影响依然有限,接下来通过本文介绍下从0编写区块链之用python解释区块链最基本原理,需要的朋友可以参考下
    2022-02-02
  • matplotlib共享坐标轴的实现(X或Y坐标轴)

    matplotlib共享坐标轴的实现(X或Y坐标轴)

    在作图的过程中,我们经常会遇到子图共用坐标轴的情况,或是共用横轴标轴,也可能是纵坐标轴。本文就介绍了matplotlib共享坐标轴,感兴趣的可以了解一下
    2021-05-05
  • python数字类型和占位符详情

    python数字类型和占位符详情

    这篇文章主要介绍了ython数字类型和占位符详情,文章围绕主题展开全文详细内容,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-03-03
  • Python基于datetime或time模块分别获取当前时间戳的方法实例

    Python基于datetime或time模块分别获取当前时间戳的方法实例

    今天小编就为大家分享一篇关于Python基于datetime或time模块分别获取当前时间戳的方法实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • Python 25行代码实现的RSA算法详解

    Python 25行代码实现的RSA算法详解

    这篇文章主要介绍了Python 25行代码实现的RSA算法,结合实例形式详细分析了rsa加密算法的概念、原理、相关实现技巧与注意事项,需要的朋友可以参考下
    2018-04-04
  • Python文本的艺术字符串处理技巧掌握

    Python文本的艺术字符串处理技巧掌握

    这篇文章主要为大家介绍了Python文本的艺术字符串处理技巧掌握,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11

最新评论