zoukankan      html  css  js  c++  java
  • 用Matplotlib绘制二维图像

    唠叨几句:

    近期在做数据分析,需要对数据做可视化处理,也就是画图,一般是用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
    ew_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
    ew_abboip.txt'
        dataFile2=r'E:cabspottingdata
    ew_utvohovy.txt'
        dataFile3=r'E:cabspottingdata
    ew_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()
        

    一些效果图:

          

  • 相关阅读:
    javascript性能
    图片及js的预加载
    url参数解析
    javascript预编译
    13、MVC 设计思想
    12、JDBC 流程
    线程-2、sleep() 、join()、yield()有什么区别
    线程-1、创建线程的方式及实现
    集合-7、HashMap实现原理及源码分析
    集合-6、HashSet 和 HashMap 区别
  • 原文地址:https://www.cnblogs.com/aaronhoo/p/5150596.html
Copyright © 2011-2022 走看看