在数据分析领域,最出名的绘图工具就是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 张图分别绘制了4种图形。

subplots的参数如下

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

下面的代码通过创造4个图像,且共享x,y坐标轴。通过wspace和hsapce设置为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()

结果如下:

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

Series.plot方法的参数:

DataFrame的plot参数

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

得到的正态分布图如下:

最新文章

  1. Python 逐行修改txt每条记录的内容
  2. [LintCode] Min Stack 最小栈
  3. 利用paramiko模块实现堡垒机+审计功能
  4. linux命令每日一练习 wc more
  5. JS获取当前页面的URL信息
  6. web前端基础篇②
  7. drivers/mfd/Mfd-core.c
  8. CreateProcessW记录
  9. NYOJ-517 最小公倍数 TLE 分类: NYOJ 2013-12-29 14:49 253人阅读 评论(0) 收藏
  10. QT的的字体使用(全局自带字体特别好用)
  11. C语言一些知识点总结
  12. HTML <td> 标签的 rowspan 属性
  13. windows的git的安装和配置
  14. 17.2 SourceInsight批量注释
  15. npm 更新版本
  16. 如何在线显示php源代码
  17. js获取当前用户IP地址和城市
  18. ios中摄像头和图片调用
  19. Spark Core(三)Executor上是如何launch task(转载)
  20. MySQL中需要注意的几点

热门文章

  1. 解决每次启动Office都出出现设置向导的问题
  2. 缺少 Google API 秘钥,因此 Chromium 的部分功能将无法使用
  3. xamarin.from ToolbarItem 字体大小和颜色更改
  4. 2016summer 训练第一场
  5. json字符串调整
  6. MFC中 日期字符串的转换
  7. redis参数配置
  8. 2016.7.12 针对不同的数据库类型generatorConfig文件中的数据库配置
  9. mongodb分片片键的选择(持续更新中)
  10. Struts2中Action自己主动接收參数