唠叨几句:
近期在做数据分析,需要对数据做可视化处理,也就是画图,一般是用Matlib来做,但Matlib安装文件太大,不太想直接用它,据说其代码运行效率也很低,在网上看到可以先用Java做数据处理,然后调用Matlib来画图,另外,还可以使用Matplotlib,它是用Python写的类似Matlib的库,能实现Matlib的功能,而且画图的质量很高,可用于做论文发表。找了一天的资料,终于出图了。
Matplotlib需要配合numpy,scipy才能使用,具体安装步骤稍后补充。
安装Python之后,在cmd中输入以下两行命令即可自动安装matplotlib,并解决库之间的依赖问题。
python -m pip install -U pip setuptools #安装pip python -m pip install matplotlib #用pip安装matplotlib
matplotlib安装方法参考:http://matplotlib.org/users/installing.html
正文:
用Matplotlib绘制二维图像的最简单方法是:
1)导入matplotlib的子模块
import matplotlib.pyplot as plt
2)给出x,y两个数组[Python列表],注意两个列表的元素个数必须相同,否则会报错
x=[1,2,3,4,5,6,7]
y=[2.6,3.6,8.3,56,12.7,8.9,5.3]
3)调用pyplot模块的绘图方法画出图像,基本的画图方法有:plot(将各个点连成曲线图)、scatter(画散点图),还有更多方法
plt.plot(x,y)
plt.scatter(x,y)
4)调用pyplot的show方法,显示结果。
plt.show()
基本代码:
import matplotlib.pyplot as plt def plot2D(): x=[1,2,3,4,5,6,7] y=[2.6,3.6,8.3,56,12.7,8.9,5.3] plt.plot(x,y)#画连线图 plt.scatter(x,y)#画散点图 plt.show() if __name__==\'__main__\': plot2D()
结果图:
依次是:仅调用plot方法、仅调用scatter方法、同时调用plot和scatter方法
下面给出一个综合示例
本例用Python读取.txt文件中的数据内容(旧金山的出租车位置信息,引自http://crawdad.org/epfl/mobility/20090224/),作为绘制图像的数据源,调用Matplotlib模块的pyplot子模块画出图像。图像类型包括散点图、曲线图,包含图例说明、title、坐标轴说明
代码:
# -*- coding: gbk -*- import re import matplotlib.pyplot as plt def loadData(dataFile,rowlimts): #dataFile=r\'E:\cabspottingdata\new_abboip.txt\' myFile=open(dataFile,\'r\',2048)#2048为缓冲大小 newline=myFile.readline() geopoints=[] splitter=re.compile(\'\\s\')#以空白字符作为分隔符 rows=0 while newline and rows<rowlimts: content=splitter.split(newline) geopoint=[] geopoint.append(float(content[1])) geopoint.append(float(content[0])) geopoints.append(geopoint) rows+=1 newline=myFile.readline() myFile.close() return geopoints def main(): rowlimits=25000#读取数据的行数 dataFile=r\'E:\cabspottingdata\new_abboip.txt\' dataFile2=r\'E:\cabspottingdata\new_utvohovy.txt\' dataFile3=r\'E:\cabspottingdata\new_uvjova.txt\' geopoints=loadData(dataFile,rowlimits) geopoints2=loadData(dataFile2,rowlimits) geopoints3=loadData(dataFile3,rowlimits) x=[] y=[] x2=[] y2=[] x3=[] y3=[] for point in geopoints: x.append(point[0]) y.append(point[1]) for point in geopoints2: x2.append(point[0]) y2.append(point[1]) for point in geopoints3: x3.append(point[0]) y3.append(point[1]) plt.plot(x,y,color=\'green\',label=\'cab 1\')#绘制绿色线条,label要起作用,必须与legend()方法配合使用 plt.scatter(x2,y2,color=\'green\',label=\'cab 2\')#用x2,y2列表绘制绿色散点图,图例为cab 2 plt.plot(x3,y3,color=\'red\',label=\'cab 3\',linewidth=1)#用x3,y3列表绘制红色线条,图例为cab 3,线条粗细设为1 #plt.scatter(x2,y2,color=\'g\',label=\'line one\',linewidths=1) #plt.plot(x, y, \'b^\', x2, y2, \'g-\') plt.legend() plt.grid(None, \'major\', \'both\')#画出网格背景 plt.title(\'Plotting the trajectory of cabs in San Fransisco with %d spatial records\'%rowlimits)#设置title plt.xlabel(\'longitude\')#说明x轴表示经度 plt.ylabel(\'latitude\')#说明y轴表示纬度 plt.show()#显示结果图 if __name__==\'__main__\': main()
一些效果图: