在研究SLAM时常常需要对其输出的位姿进行复现以检测算法效果,在ubuntu系统中使用Python可以很好的完成相关的工作。

一. Ubuntu下Python的使用

在Ubuntu下使用Python有两种方法,一种是直接在控制台中运行Python文件,一种是下载IDE编辑并运行Python文件。

在控制台中使用Python方法如下:

首先确认有Python文件(filename.py),然后打开控制台进入文件当前目录,并输入以下内容就可以运行了。

python file_name.py

虽然控制台可以运行Python,不过由于不能调试等问题仍然比较推荐使用IDE。

官网中提供professional和community两种版本,因为community版本免费大家可以直接下载使用。下载好后直接放到安装目录中解压,然后跟着解压后的说明文件执行安装命令即可安装成功(部分电脑由于配置原因可能会报错,网上有很多讲解配置环境安装博客,大家可以参考)。安装成功后,PyCharm界面如下图。

二. matplotlib绘制三维轨迹

Matplotlib是Python的一个绘图库,想面将讲解如何使用这个库来绘制三维线段,以此检测SLAM算法的输出结果(电脑配置Python 2.7)。

2.1. 绘制基本三维曲线

首先给出完整代码,以及输出结果。

# import necessary module

from mpl_toolkits.mplot3d import axes3d

import matplotlib.pyplot as plt

import numpy as np

# load data from file

# you can replace this using with open

data1 = np.loadtxt("./stereo/CameraTrajectoryNew2000.txt")

first_2000 = data1[:, 3]

second_2000 = data1[:, 7]

third_2000 = data1[:, 11]

# print to check data

print first_2000

print second_2000

print third_2000

# new a figure and set it into 3d

fig = plt.figure()

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

# set figure information

ax.set_title("3D_Curve")

ax.set_xlabel("x")

ax.set_ylabel("y")

ax.set_zlabel("z")

# draw the figure, the color is r = read

figure = ax.plot(first_2000, second_2000, third_2000, c='r')

plt.show()

这段代码非常简单,而且相关的注释也很完善,因此只简要说明几个需要注意的地方。第一个需要注意的是读取文件中数据比较推荐用with open 然后逐行读取;第二点是在新建图像时一定别忘了添加这段代码,这是输出图像设定为3D的关键。

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

2.2. 同一张图中绘制多个三维曲线

代码和输出结果如下:

# import necessary module

from mpl_toolkits.mplot3d import axes3d

import matplotlib.pyplot as plt

import numpy as np

# load data from file

# you replace this using with open

data1 = np.loadtxt("./stereo/CameraTrajectoryNew2000.txt")

first_2000 = data1[:, 3]

second_2000 = data1[:, 7]

third_2000 = data1[:, 11]

data2 = np.loadtxt("./stereo/CameraTrajectoryNew1500.txt")

first_1000 = data2[:, 3]

second_1000 = data2[:, 7]

third_1000 = data2[:, 11]

# new a figure and set it into 3d

fig = plt.figure()

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

# set figure information

ax.set_title("3D_Curve")

ax.set_xlabel("x")

ax.set_ylabel("y")

ax.set_zlabel("z")

# draw the figure, the color is r = read

figure1 = ax.plot(first_2000, second_2000, third_2000, c='r')

figure2 = ax.plot(first_1000, second_1000, third_1000, c='b')

plt.show()

实现这个功能只需要在之前代码中加入读取新数据的相关代码,以及在画图时多生成一个图即可,也是非常的简单。

2.3. 将区域划分后绘制三维图像

代码和输出结果如下:

# import necessary module

from mpl_toolkits.mplot3d import axes3d

import matplotlib.pyplot as plt

import numpy as np

# load data from file

# you replace this using with open

data1 = np.loadtxt("./stereo/CameraTrajectoryNew2000.txt")

first_2000 = data1[:, 3]

second_2000 = data1[:, 7]

third_2000 = data1[:, 11]

data2 = np.loadtxt("./stereo/CameraTrajectoryNew1500.txt")

first_1500 = data2[:, 3]

second_1500 = data2[:, 7]

third_1500 = data2[:, 11]

# new a figure and set it into 3d

fig = plt.figure()

# ############ first subplot ############

ax = fig.add_subplot(2, 2, 1, projection='3d')

ax.set_title("3D_Curve1")

ax.set_xlabel("x")

ax.set_ylabel("y")

ax.set_zlabel("z")

# draw the figure, the color is r = read

figure1 = ax.plot(first_2000, second_2000, third_2000, c='r')

figure2 = ax.plot(first_1500, second_1500, third_1500, c='b')

# ############ second subplot ############

ax = fig.add_subplot(2, 2, 2, projection='3d')

# set figure information

ax.set_title("3D_Curve2")

ax.set_xlabel("x")

ax.set_ylabel("y")

ax.set_zlabel("z")

# draw the figure, the color is r = read

figure1 = ax.plot(first_2000, second_2000, third_2000, c='r')

figure2 = ax.plot(first_1500, second_1500, third_1500, c='b')

# ############ third subplot ############

ax = fig.add_subplot(2, 2, 3, projection='3d')

# set figure information

ax.set_title("3D_Curve3")

ax.set_xlabel("x")

ax.set_ylabel("y")

ax.set_zlabel("z")

# draw the figure, the color is r = read

figure1 = ax.plot(first_2000, second_2000, third_2000, c='r')

figure2 = ax.plot(first_1500, second_1500, third_1500, c='b')

# ############ fourth subplot ############

ax = fig.add_subplot(2, 2, 4, projection='3d')

# set figure information

ax.set_title("3D_Curve4")

ax.set_xlabel("x")

ax.set_ylabel("y")

ax.set_zlabel("z")

# draw the figure, the color is r = read

figure1 = ax.plot(first_2000, second_2000, third_2000, c='r')

figure2 = ax.plot(first_1500, second_1500, third_1500, c='b')

plt.show()

主要需要解释下面这行代码:

ax = fig.add_subplot(2, 2, 1, projection='3d')

这行代码主要是说,将当前空间拆分建立新的子图,子图个数为四,按照2x2矩阵排列方式进行,当前子图为四个子图中的第一个,且为3D模式。

以上就是就是如何使用matplotlib绘制三位曲线。总的来说比较简单,没有什么难度,Python的确是一个非常好用的编程语言。更多关于matplotlib的使用方法大家可以参考他们的官方网站,里面有相关的tutorial以及examples。

Python学习-使用matplotlib画动态多图

最近常常使用matplotlib进行数学函数图的绘制,可是怎样使用matplotlib绘制动态图,以及绘制动态多图.直到今天才学会. 1.參考文字 首先感谢几篇文字的作者.帮我学会了怎样绘制.大家也能 ...

python学习之matplotlib绘制动图(FuncAnimation()参数)

1.函数FuncAnimation(fig,func,frames,init_func,interval,blit)是绘制动图的主要函数,其参数如下: a.fig 绘制动图的画布名称 b.func自定 ...

使用python绘制根轨迹图

最近在学自动控制原理,发现根轨迹这一张全是绘图的,然而书上教的全是使用matlab进行计算机辅助绘图.但国内对于使用python进行这种绘图的资料基本没有,后来发现python-control包已经将 ...

Python使用matplotlib绘制三维曲线

本文主要演示如何使用matplotlib绘制三维图形 代码如下: # -*- coding: UTF-8 -*- import matplotlib as mpl from mpl_toolkits. ...

【转】使用Python matplotlib绘制股票走势图

转载出处 一.前言 matplotlib[1]是著名的python绘图库,它提供了一整套绘图API,十分适合交互式绘图.本人在工作过程中涉及到股票数据的处理如绘制K线等,因此将matplotlib的使 ...

Matplotlib学习---用matplotlib画箱线图(boxplot)

箱线图通过数据的四分位数来展示数据的分布情况.例如:数据的中心位置,数据间的离散程度,是否有异常值等. 把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q3)分 ...

【Python环境】matplotlib - 2D 与 3D 图的绘制

2015-10-30数据科学自媒体 类MATLAB API 最简单的入门是从类 MATLAB API 开始,它被设计成兼容 MATLAB 绘图函数. 让我们加载它: from pylab import ...

matplotlib绘制三维图

本文参考官方文档:http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html 起步 新建一个matplotlib.figure.Figure对象, ...

Python教程:matplotlib 绘制双Y轴曲线图

前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:数据皮皮侠 双X轴的可以理解为共享y轴 ax1=ax.twiny() ...

随机推荐

Email系列(QQ邮箱 + 含附件的邮箱案例 + 项目实战)

平台之大势何人能挡? 带着你的Net飞奔吧! http://www.cnblogs.com/dunitian/p/4822808.html 邮箱系列:https://github.com/duniti ...

infopath发布的提示“无法解析SOAP消息”(The SOAP message cannot be parsed)问题解决方案

最近发现一个列表数据过大,每次发布infopath表单提示如下错误: 后来发现一个infopath表单通过list.asmx and Formsservice.asmx来进行发布的. This err ...

Groovy 模版引擎

1. Introduction Groovy supports multiple ways to generate text dynamically including GStrings, print ...

从键盘上输入一个正整数n,请按照以下五行杨辉三角形的显示方式, 输出杨辉三角形的前n行。请采用循环控制语句来实现。

Scanner sc=new Scanner(System.in); System.out.println("请输入一个正整数:"); int ss=sc.nextInt(); i ...

USE “schema_name” in PostgreSQL

http://timmurphy.org/tag/mysql/ http://timmurphy.org/2009/11/17/use-schema_name-in-postgresql/ ===== ...

table边框美化

用python画动态三维轨迹_Python学习(一) —— matplotlib绘制三维轨迹图相关推荐

  1. python做实时温度曲线图_Python学习记录 - matplotlib绘制温度变化折线图

    Python学习记录 - matplotlib绘制温度变化折线图 Python学习记录 - matplotlib绘制温度变化折线图 题目:列表a表示10点到12点每一分钟的气温,累计为2个小时,绘制折 ...

  2. python画椭圆形函数算法_python如何使用matplotlib绘制椭圆的数学公式-百度经验

    python是一门非常实用的编程语言,matplotlib库是python的可视化的实现方式,matplotlib提供了对latex的实现,那怎样用matplotlib绘制椭圆的公式呢? 工具/原料 ...

  3. 用python画数学函数图像教程_使用Matplotlib 绘制精美的数学图形例子

    一个最最简单的例子: 绘制一个从 0 到 360 度完整的 SIN 函数图形 import numpy as np import matplotlib.pyplot as pt x = np.aran ...

  4. python 画在同一坐标轴_Python学习第95课-多个数据在同一个坐标轴画图叠加

    [每天几分钟,从零入门python编程的世界!] 我们已经学过了绘制折线图.柱状图.直方图.散点图.饼状图和堆栈图. 这节课我们学习如何把多个数据画图叠加,这种图形可以用作多组数据的对比. 下面我们通 ...

  5. python画动态表情包_python还可以这么玩(三)?

    在表情包中,静态的单张表情包有时候已经满足不了我们的搞怪了,这时候需要更需要一张搞怪的gif动态的表情包,前面两篇文章主要讲解了制作单张的表情包,大家不要以为python只能制作单张的表情包,多张动态 ...

  6. python画有权重网络图_Python可视化之NetworkX绘制网络图\节点关系

    除了Gephi,python的NetworkX也是绘制网络图的利器,后者功能更强大,能兼容Gephi的一些绘制结果,但相应学习成本也更高点.另外似乎还有一个igraph-python库,后期可以学习一 ...

  7. python画奥运五环小结_python使用turtle库绘制奥运五环

    Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行 ...

  8. python条形图x轴设定_Python入门--利用matplotlib绘制折线图和条形图(1)

    目标一:绘制一幅折线图 # 代码如下: import matplotlib.pyplot as plt input_values = [1, 2, 3, 4, 5] squares = [1, 4, ...

  9. python绘制三维轨迹_Python学习(一) —— matplotlib绘制三维轨迹图

    在研究SLAM时常常需要对其输出的位姿进行复现以检测算法效果,在ubuntu系统中使用Python可以很好的完成相关的工作. 一. Ubuntu下Python的使用 在Ubuntu下使用Python有 ...

最新文章

  1. LabVIEW图像灰度分析与变换(基础篇—4)
  2. Java Web的Maven项目中Properties文件的使用(2)
  3. 开始学习Solaris
  4. USB自定义HID设备实现-STM32
  5. 突发:美赛官方承认邮箱服务器存在问题导致提交失败,将会发布更新!
  6. Boost:boost::source_location的用法测试程序
  7. ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程
  8. AI面试必备!你不可不知的10个深度学习方法
  9. 异常处理、socke基于TCP协议编程
  10. YbtOJ#20066-[NOIP2020模拟赛B组Day4]筹备计划【线段树,树状数组】
  11. 小说中场景的功能_场景在小说中的作用
  12. linux定时结束java进程_使用zt-exec库定时清理linux休眠进程
  13. Mac OSX 安装nvm(node.js版本管理器)
  14. 打印异常堆栈_定位生产问题时,异常堆栈莫名丢了,何解?
  15. 双活架构保服务24小时在线
  16. java里面的pai_Java - ZhangPai - 博客园
  17. Java Socket编程(一)TCP/IP简介
  18. 微型计算机任务名称,任务五微型计算机的硬件组成.ppt
  19. 尚雯婕-《6合辑》专辑[APE/FLAC整轨]
  20. 获取各种屏幕大小(包括电脑屏幕)

热门文章

  1. 计算机上怎么没有桌面选项,另存为没有桌面选项怎么办-处理电脑另存为找不到桌面的方法 - 河东软件园...
  2. js , java 异或加密解密
  3. html中怎么调用时间控件的值,如何给vue 日期控件赋值
  4. FFmpeg学习 avcodec软解码函数分析
  5. 牛,微信支付架构竟然是这么实现的
  6. echarts图表y坐标轴单位
  7. 【毕业设计】基于单片机的智能避障超声波跟随小车 - 物联网 嵌入式
  8. 《DD-PPO: LEARNING NEAR-PERFECT POINTGOAL NAVIGATORS FROM 2.5 BILLION FRAMES》-----强化学习论文笔记
  9. [译]利用 Android 构建 TV 的未来
  10. 智慧楼宇管理系统的功能和应用场景