zoukankan      html  css  js  c++  java
  • python数据分析之:绘图和可视化

    在数据分析领域,最出名的绘图工具就是matlib。在Python同样有类似的功能。就是matplotlib。前面几章我们都在介绍数据的生成,整理,存储。那么这一章将介绍如果图形化的呈现这些数据。来看下面的代码

    这个代码通过numpy生成50个随机数,然后进行求和,最后将50个数绘制成图像,k--代表以虚线的方式

    import matplotlib.pyplot as plt

    from numpy.random import randn

    if __name__=="__main__":

        plt.plot(randn(50).cumsum(),'k--')

    plt.show()

    得到的图片如下

    我们还可以在一副图中显示多个图片。

    fig=plt.figure()

    ax1=fig.add_subplot(2,2,1)

    ax2=fig.add_subplot(2,2,2)

    ax3=fig.add_subplot(2,2,3)

    ax4=fig.add_subplot(2,2,4)

    plt.show()

    matplotlib的图像都位于Figure对象中,通过fig.add_subplot可以创建多个图片。比如fig.add_subplot(2,2,1)代表总共4个图像,1代表为第1个图像。那么这样我们就可以绘制多个图像,每个图像用不同的方式来呈现

        fig=plt.figure()

        ax1=fig.add_subplot(2,2,1)

        ax2=fig.add_subplot(2,2,2)

        ax3=fig.add_subplot(2,2,3)

        ax4=fig.add_subplot(2,2,4)

        ax1.plot(randn(50).cumsum(), 'k--')

        ax2.hist(randn(50).cumsum())

        ax3.scatter(np.arange(30),np.arange(30)+3*randn(30))

        ax4.plot(randn(50).cumsum())

    plt.show()

    下面张图分别绘制了4种图形。

    subplots的参数如下

    我们还可以针对subplot调整各个图的间距,通过subplots_adjust就可以达到

    下面的代码通过创造4个图像,且共享x,y坐标轴。通过wspacehsapce设置为0,将各个图像的左右,上下边界都连接在了一起。

        fig,axis=plt.subplots(2,2,sharex=True,sharey=True)

        [axis[i,j].hist(randn(50),bins=50,color='k',alpha=0.5) for i in range(2) for j in range(2)]

        plt.subplots_adjust(wspace=0, hspace=0)

        plt.show()

    结果如下:

    前面介绍了如何作图,下面将对图片进行更细化的操作,设置x,y轴的刻度以及设置图片标题。在下面的代码中,设置x的刻度为0,10,25,40,50几个区间并设置图片的标题为test

        fig=plt.figure()

        ax=fig.add_subplot(1,1,1)

        ax.plot(randn(50).cumsum(),'k',label='one')

        ax.set_xticks([0,10,25,40,50])

        ax.set_title("test")

    plt.show()

    结果如下:

    还可以通过ax.text(x,y,"2010")的方式对图标上的某一点坐标进行文本标注

    比如ax.text(0,0,"2010")就在0,0的坐标上标注2010的样式

    既然生成了图片,那么该如何保存呢通过savefig的方式就可以进行保存,通过指定不同的图片后缀名就可以进行文件的保存。

    plt.savefig("figure.svg")

    plt.savefig("figure.jpg")

    plt.savefig("figure.png")

    pandas中的绘图函数:

    前面介绍了matplotlib中的绘图方法,这一章将介绍pandas中绘图方法。代码如下

    首先通过Series产生数据,然后Series对象的索引会被传递给matplotlib用于绘制X

    s=Series(np.random.randn(10).cumsum(),index=np.arange(0,100,10))

    s.plot(color='k',alpha=0.7)

    plt.title('pandas test')

    plt.show()

    结果如下所示:

    接下来看下DataFrame的结果图:

    d=DataFrame(np.random.randn(10,4).cumsum(0),columns=['A','B','C','D'],index=np.arange(0,100,10))

    d.plot()

    plt.show()

    结果如下:

    通过上图可以看到DataFrameplot方法会在一个subplot中为各列绘制一条线,并自动创建图例。

    Series.plot方法的参数:

    DataFrameplot参数

    plot中通过指定kind可以生成不同的图形,比如kind=’bar’就是生成柱状图

    我们在来看下下面的这组数据,通过设置stacked=True即可为DataFrame生成堆积柱状图,这样可以使得每行的值就会被堆积在一起。

    frame=DataFrame([[1,16,1,1,0,0],[2,53,18,13,1,0],[0,39,15,18,3,1],[1,48,4,5,1,3]],columns=[1,2,3,4,5,6],index=['Fri','Sat','Sun','Thur'])

    frame.index.name=['day']

    frame.columns.names=['size']

    print frame

    frame.plot(kind='barh',stacked=True)

    plt.show()

    数据如下:该数据的列表示人的索引。行代表是天数。这个数据的意义在与指示每个人在从周四到周日的消费情况

    size   1   2   3   4  5  6

    [day]                     

    Fri    1  16   1   1  0  0

    Sat    2  53  18  13  1  0

    Sun    0  39  15  18  3  1

    Thur   1  48   4   5  1  3

    通过下面得到的结果来看,我们可以看到在周末的时候消费明显增加。

    密度图:

    密度图也成为kde图,这个图是生成标准正态分布图

    s=Series(np.random.randn(20))

    s.plot(kind='kde')

    plt.show()

    得到的正态分布图如下:

  • 相关阅读:
    mysql环境搭建
    php基础:查看上次插入的主键和影响的行数及关闭mysql连接
    php基础:文件包含与引用 require和include的区别
    php基础:echo和print_r和var_dump的区别
    php基础:变量检测
    php基础:动态变量名
    php基础:代码的短路特性和运算符优先级
    php基础:三元运算符及比较3个数的大小
    php基础:字符串基本函数
    php基础:数组的定义和遍历
  • 原文地址:https://www.cnblogs.com/zhanghongfeng/p/8546693.html
Copyright © 2011-2022 走看看