python数据分析之:绘图和可视化

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

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

import matplotlib.pyplot as plt函数

from numpy.random import randn工具

if __name__=="__main__":spa

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

plt.show()对象

获得的图片以下blog

咱们还能够在一副图中显示多个图片。索引

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()

获得的正态分布图以下:

相关文章
相关标签/搜索