zoukankan      html  css  js  c++  java
  • 《利用Python进行数据分析》学习笔记之Matplotlib : pandas中的绘图函数

    Pandas有许多能够利用DataFrame对象数据组织特点来创建标准图表的高级绘图方法,本文主要介绍的是pandas中的绘图函数。

    #coding:utf-8
    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    from pandas import DataFrame,Series
    

    1. 线形图

    df.plot( kind='line')

    • Series 的plot 方法会以index作为X轴,画一条线
    • DataFrame 的plot 方法会以index作为X轴,给每一列绘制一条线,columns作为图例。
    #第一种创建画布和画布分区方法,分开创建figure和subplot对象
    fig=plt.figure()
    #Series 的线形图
    ax1=fig.add_subplot(2,1,1)
    s=Series(np.random.rand(10).cumsum(),index=np.arange(0,100,10))  
    s.plot( kind='line')
    plt.xlabel(u"index") 
    plt.title(u"Serise的线形图")
    plt.show()
    #DataFrame的线形图
    ax2=fig.add_subplot(2,1,2)
    df=DataFrame(np.random.rand(10,4).cumsum(0),index=np.arange(0,100,10),columns=pd.Index(['A','B','C','D'],name='Genus'))
    df.plot( kind='line')
    plt.xlabel(u"index") 
    plt.title(u"DataFrame的线形图")
    plt.show()
    
    

    其中,Series.plot方法的参数

    • kind :图的类型,‘line’,'bar','barh','kde'
    • label :图例标签
    • ax :需要绘制的对象
    • rot :旋转角度
    • xticks :X轴刻度值
    • xlim :X轴刻度范围
    • grid :显示网格

    2. 柱状图

    df.plot( kind='bar') : 垂直柱状图

    df.plot( kind='barh') : 水平柱状图

    df.plot( kind='bar',stacked=True) : stacked属性为True可以设置为堆积柱状图

    Series的柱状图

    #第二种创建画布和画布分区方法,创建figure,返回一个subplot对象
    fig,axes =plt.subplots(2,1)             
    s=Series(np.random.rand(16),index=list('abcdefghijklmnop'))  
    s.plot( kind= 'bar' ,ax=axes[0])       #返回的axes的数组可指定在哪个subplot对象上画图
    s.plot( kind= 'barh' ,ax=axes[1])      
    plt.show()
    

    DataFrame的柱状图

    • 每一行的值为一组,每一列的columns为图例
    fig,axes =plt.subplots(2,1)                    
    df=DataFrame(np.random.rand(4,4),index=['one','two','three','four'],columns=pd.Index(['A','B','C','D'],name='Genus'))  
    df.plot( kind= 'bar',ax=axes[0] )             
    df.plot( kind= 'bar',ax=axes[1],stacked=True )  #stacked=True 可以生成堆积柱状图
    plt.show()
    

    3.密度图( KDE, Kernel Density Estimate ,核密度估计 )

    • 密度图即为连续概率分布图,将分布近似为标准混合正态分布。

    df.plot( kind='kde')

    fig=plt.figure()
    #Series 的密度图
    fig.add_subplot(2,1,1)
    s=Series(np.random.rand(50).cumsum(),index=np.arange(0,100,2))  
    s.plot(kind='kde')
    plt.title(u"Series的密度图")
    plt.show()
    
    #DataFrame 的密度图,会给每一列都画一条密度估计线,并将columns自动生成图例
    fig.add_subplot(2,1,2)
    df=DataFrame(np.random.rand(10,4).cumsum(0),index=np.arange(0,100,10),columns=pd.Index(['A','B','C','D'],name='Genus'))
    df.plot(kind='kde')
    plt.title(u"DataFrame的密度图")
    plt.show()
    

    4.直方图

    • 直方图是对值频率进行离散化显示的柱状图,数据点呗拆分到离散的、间隔均匀的面元中。

    df.hist( bins=10) :bins属性可设置柱子数量

    fig=plt.figure()
    #Series 的密度图
    fig.add_subplot(2,1,1)
    s=Series(np.random.rand(20).cumsum(),index=np.arange(0,100,5))  
    s.hist( bins=10)
    plt.title(u"Series的直方图")
    plt.show()
    
    #DataFrame 的密度图,会给每一列都画一张直方图,并将列名作为对应标题
    fig.add_subplot(2,1,2)
    df=DataFrame(np.random.rand(10,4).cumsum(0),index=np.arange(0,100,10),columns=pd.Index(['A','B','C','D'],name='Genus'))
    df.hist( bins=10)
    plt.show()
    
    

    5.散点图

    • 散点图是观察两个一维数据间关系的有效方式

    plt.scatter(X,Y)

    macro = pd.read_csv('macrodata.csv')
    data = macro[['cpi','m1','tbilrate','unemp']]
    trans_data = np.log(data).diff().dropna()
    # 画出两个Series之间的散点图
    plt.scatter(trans_data['m1'],trans_data['unemp'])
    plt.title('Change in log %s vs.log %s' % ('m1','unemp'))
    plt.show()
    

    DataFrame的散点图矩阵

    • 创建散布图矩阵,会把DataFrame中任意两列画散点图,观察其之间的关系。

    • 支持在对角线上放置各变量的直方图或者密度图

    pd.scatter_matrix( trans_data ,diagonal = 'kde' ,color ='k' ,alpha=0.3)

    # 画出散布图矩阵
    pd.plotting.scatter_matrix( trans_data ,diagonal = 'kde' ,color ='k' ,alpha=0.3)
    plt.show()
    

  • 相关阅读:
    hadoop文件写入
    elastic(10) 基本查询
    hadoop 小知识点
    "hadoop namenode -format"命令的作用和影响的文件
    elastic(9)映射
    Linux 学习笔记之 --- epoll 事件模型详解
    Linux 学习笔记之 --- select 与 poll 事件模型详解
    Tornado 高并发源码分析之二---Tornado启动和请求处理流程
    Tornado 高并发源码分析之五--- IOLoop 对象
    Tornado 高并发源码分析之四--- HTTPServer 与 TCPServer 对象
  • 原文地址:https://www.cnblogs.com/laiyaling/p/10063530.html
Copyright © 2011-2022 走看看