先前,我们已经介绍过 matplotlib 第三方绘图库的基本操作方法。
这里,我们将介绍如何通过读取文件中的数据来绘制其图像的操作方法。
基本绘制方法
假设要绘制的数据存储在名为 sample.txt 的文件中,如下所示:
sample.txt 存储数据内容
1 import matplotlib.pyplot as plt 2 3 X, Y = [], [] 4 for line in open('sample.txt', 'r'): 5 values = [float(s) for s in line.split()] 6 X.append(values[0]) 7 Y.append(values[1]) 8 9 plt.plot(X, Y)10 plt.show()
上述代码:
#4 只读方式打开文件,以行为单位读取。
#5 分离每行数据并存储在列表中,其中 split 函数调用格式如下:
str.split(str="", num=string.count(str))
参数:
str -- 分隔符,默认为所有的空字符,包括空格、换行()、制表符()等。
num -- 分割次数,默认为 -1, 即分隔所有。
返回值:
返回分割后的字符串列表。
#6 存储分离得到的 X 坐标数据。
#7 存储分离得到的 Y 坐标数据。
sample.txt 文件数据绘制图像
上述操作是基于 Python 基本方法进行读取文件数据和绘制图像的。事实上,这样做无法处理一些可能出现的错误现象,从编程角度来看,是不严谨的。此外,matplotlib 还通常与 numpy 进行结合使用,进行处理用于绘制图像的数据源。
改良绘制方法
1 import numpy2 import matplotlib.pyplot as plot3 4 data = numpy.loadtxt('sample.txt')5 6 plot.plot(data[:,0], data[:,1])7 plot.show()
上述代码:
#4 numpy.loadtxt( )函数读取文件后,返回的是一个二维数组,类型上是矩阵。这就有利于我们能够方便地通过矩阵行、列的概念来分别获得 x、y 坐标的数值(#6 (data[:,0], data[:,1]))。
相较前面,上述代码更加简洁,而且,运用 numpy 后还能够快速处理大型数据文件,并且可以支持其它数据文件格式(诸如 CSV、matlab 等)。
此外,上述代码还可以支持类似如下情况中的多条曲线绘制任务:
比如,当文件中包含有 N 列数据时,即绘制 N-1 条曲线。第一列即为 x 坐标数值,第二列即为第一条曲线的 y 坐标数值;第三列即为第二条曲线的 y 坐标数值;以此类推……
示例:
假设此时数据文件中包含如下内容:
sample.txt 数据文件存储内容
1 import numpy2 import matplotlib.pyplot as plot3 4 data = numpy.loadtxt('sample.txt')5 6 for column in data.T:7 plot.plot(data[:,0], column)8 9 plot.show()
上述代码:
#6 通过 data.T 矩阵转置(列→行)后读取的“行”即为原始矩阵的“列”。
#7 绘制多条曲线。
多条曲线绘制
小结:
本文介绍了如何用存储在文件中的数据直接绘制其图像的操作方法。在实际运用中,绝大多数绘制图像的数据源都是存储在某种格式的文件中。因此,学会上述图像绘制方法后,将有利于我们发挥其实际效用,特别是对于大型数据源。
欢迎大家关注交流,一起讨论学习!