当前位置: 代码迷 >> 综合 >> “Beginning Python”(七)“matplotlib”
  详细解决方案

“Beginning Python”(七)“matplotlib”

热度:58   发布时间:2024-01-09 07:10:18.0

    上一篇主要介绍的是用“ReportLab”库来画图和生成报告,并顺便提到了matplotlib。事实上,经过一番探索,我发现:matplotlib+numpy才是目前最流行的python画图模块。这一章,我将结合我之前碰到的几个实际应用,来一窥matplotlib的奇妙。


一、模块简介

    matplotlib与numpy一般是组合在一起使用,前者执行画图,后者执行矩阵运算。

1,matplotlib

    http://matplotlib.org/

    上面是matplotlib的官网,它提供了一个“gallery”,里面有各种用matplotlib画的图,点击图片即可看到源码,非常方便用户找到适合自己需要的模板。此外,它的文档也做的很详细,并提供PDF文件共下载。

    如果想快速入门了解,可以看这两篇博客:

    http://www.cnblogs.com/wei-li/archive/2012/05/23/2506940.html

    http://hyry.dip.jp/tech/book/page/scipy/matplotlib.html

    matplotlib事实上,分为快速画图API和面向对象画图。快速画图API由matplotlib.pyplot模块提供支持,它是对各种对象的封装,以使它用起来像matlab。如果碰上比较复杂的画图和大型工程,最好选择“面向对象画图”,而不是matplotlib.pyplot。


2,numpy

    http://www.numpy.org/

    以上是numpy的官网,它提供了文档链接:https://docs.scipy.org/doc/

    从这个链接来看,貌似numpy已经和scipy捆绑了。

    如果想要快速了解numpy,可以从这个文档链接跳转:“NumPy User Guide -> Quickstart”;一般性的函数查询,可以进入“NumPy Reference”。


二、实战项目

1,项目介绍

    我在学python之前写过一篇博文:《介绍两种通过IQ数据快速画时域功率图的方法》。

    “http://blog.csdn.net/sagittarius_warrior/article/details/54963431”

    这两种方法分别是matlab和excel。现在,我就用python,严格来说是numpy+matplotlib,来重新实现这个项目。此外,在我的博文《IQ波形文件生成器》中,我生成了一个二进制波形文件,但是并不知道里面的数据是否正确,现在可以将这个二进制波形文件读取出来,画出功率图来查看它是否正确。

    http://blog.csdn.net/sagittarius_warrior/article/details/74426542


先看一下实现效果:

                       

    对比上面这幅图和之前用matlab画的图,从波形上看是一致,只是线条的粗细不同。


2,代码分析

#PyPlotWave
import struct
from math import sqrt
import numpy as np
import matplotlib.pyplot as pltfilename1 = input('Please enter wave file name:\t') or 'DataOfIQ.txt'
fOut = open('wave.iqbin','wb') 
for line in open(filename1, 'rt').readlines():str1, str2 = line.split(',')iBytes, qBytes = struct.pack('f',float(str1)), struct.pack('f',float(str2))  fOut.write(iBytes)  fOut.write(qBytes)fOut.close()A = np.fromfile("wave.iqbin", dtype=np.float32)  # read the data into numpy
x = A[::2]
y = A[1::2]
fig, ax = plt.subplots()
ax.plot(x **2 + y ** 2)
plt.show()

1)8-16行主要将txt文件转为二进制文件。

2)17行读取二进制文件,并返回一个(一维)矩阵。

3)18-19行应用了step技巧,通过list的slice方法,抽取奇偶项组成新的(一维)矩阵。

注:参考https://docs.python.org/2.3/whatsnew/section-slices.html

4)20-22行画图。