python中的Matlibplot绘图库

1、概述

Matplotlib的GitHub链接:
https://github.com/matplotlib/matplotlib

Matplotlib的安装链接:
http://blog.csdn.net/walkandthink/article/details/45200597

Matplotlib 是一个在 python 下实现的类 matlab 的纯 python 的三方库,旨在用 python实现 matlab 的功能,是python 下最出色的绘图库,功能很完善,其风格跟 matlab 很相似,同时也继承了 python 的简单明了的风格,其可以很方便地设计和输出二维以及三维的数据, 其提供了常规的笛卡尔坐标, 极坐标, 球坐标, 三维坐标等。

其使用中要先安装 numpy 库 (一个python 下数组处理的三方库, 可以很方便的处理矩阵,数组) ,对于做数据图,其原理很简单,就是把函数变成关X于,Y,Z的坐标点的数组,如函数Y=X2 ,我们画图是也是先找一组特征点(x,y),然后连接成线,matplotlib出图的过程和我 们画图过程差不多,先生成 X 的一个取值数组,如要画区间[0,1]的图像,则先取[0,1]之内的一 组数组(如:x=arange(0,1,0.01)表示 x 以 0.01 为步长取 100 个点),然后去对应 x 的对应 y 的 值的一组数据,这样以坐标(x,y)画出的图就是一条曲线了。

matplotlib 对于图像美化方面的比较完善,可以自定义线条的颜色和样式,可以在一张绘图纸上绘制多张小图,也可以在一张图上绘制多条线, 可以很方便地将数据可视化并对比分析。

各函数含义:

这里写图片描述

Title为标题。Axis为坐标轴,Label为坐标轴标注。Tick为刻度线,Tick Label为刻度注释。各个对象之间有下面的对象隶属关系:

这里写图片描述

2、numpy处理数据

numpy官方链接: http://www.numpy.org/

matplotlib将数据可视化时基本上用到两种方法:

(1)arange函数类似于python的range函数,通过指定开始值、终值和步长来创建一维数组, 注意数组不包括终值。

#此函数在区间[0,1]之间以0.1为步长生成一个数组。如果第三个参数不存在,则预设为1。
import numpy as np
print np.arange(0,1,0.1)

result:
[ 0.   0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9]

(2)linspace函数通过指定开始值、终值和元素个数来创建一维数组,可以通过endpoint关键字指定是否包括终值,缺省设置是包括终值。

#np.linspace(0, 1, 12,endpoint=False),设置不包括终值
import numpy as np
print np.linspace(0, 1, 12)

3、折线图

#绘制折线图
import matplotlib.pyplot as plt
year = [2011,2012,2013,2014]
pop = [1.2,3.4,4.5,6.5]
#折线图绘制函数
plt.plot(year,pop)
plt.show();

这里写图片描述

4、散点图

#绘制折线图
import matplotlib.pyplot as plt
year = [2011,2012,2013,2014]
pop = [1.2,3.4,4.5,6.5]
#散点图绘制函数
plt.scatter(year,pop)
plt.show();

这里写图片描述

5、直方图

#绘制直方图
import matplotlib.pyplot as plt
values = [0,1,2,3,4,1,2,3,4,4,5,2,4,1]
#直方图绘制函数,bins为直方图间隔份数
plt.hist(values,bins=10)
plt.show()

这里写图片描述

6、修饰图

title(’图形名称’) (都放在单引号内)
xlabel(’x轴说明’)
ylabel(’y轴说明’)
text(x,y,’图形说明’)
legend(’图例1’,’图例2’,…)

#coding=utf-8
import matplotlib.pyplot as plt

year = [1950,1970,1990,2010]
pop = [2.3,3.4,5.8,6.5]

#折线图,实体填充
plt.fill_between(year,pop,0,color='green')

#轴的标签
plt.xlabel('Year')
plt.ylabel('Population')

#轴的标题
plt.title('World Population')

#轴的y刻度
plt.yticks([0,2,4,6,8,10],['0B','2B','4B','6B','8B','10B'])

这里写图片描述

7 、绘制多个子图

import matplotlib.pyplot as plt
import numpy as np

def f(t):
    return np.exp(-t) * np.cos(2 * np.pi * t)

t1 = np.arange(0, 5, 0.1)
t2 = np.arange(0, 5, 0.02)

plt.figure(12)
plt.subplot(221)
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'r--')

plt.subplot(222)
plt.plot(t2, np.cos(2 * np.pi * t2), 'r--')

plt.subplot(212)
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])

plt.show()

这里写图片描述

8、绘制三维图像

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
X = [1, 1, 2, 2]
Y = [3, 4, 4, 3]
Z = [1, 2, 1, 1]
ax.plot_trisurf(X, Y, Z)
plt.show()

这里写图片描述

9、plt.axes()

我们先来看什么是Figure和Axes对象。在matplotlib中,整个图像为一个Figure对象。在Figure对象中可以包含一个,或者多个Axes对象。每个Axes对象都是一个拥有自己坐标系统的绘图区域。其逻辑关系如下:
这里写图片描述

import matplotlib.pyplot as plt
import numpy as np

# create some data to use for the plot
dt = 0.001
t = np.arange(0.0, 10.0, dt)
r = np.exp(-t[:1000] / 0.05)  # impulse response
x = np.random.randn(len(t))
s = np.convolve(x, r)[:len(x)] * dt  # colored noise

# the main axes is subplot(111) by default
plt.plot(t, s)
plt.axis([0, 1, 1.1 * np.amin(s), 2 * np.amax(s)])
plt.xlabel('time (s)')
plt.ylabel('current (nA)')
plt.title('Gaussian colored noise')

# this is an inset axes over the main axes
a = plt.axes([.65, .6, .2, .2], axisbg='y')
n, bins, patches = plt.hist(s, 400, normed=1)
plt.title('Probability')
plt.xticks([])
plt.yticks([])

# this is another inset axes over the main axes
a = plt.axes([0.2, 0.6, .2, .2], axisbg='y')
plt.plot(t[:len(r)], r)
plt.title('Impulse response')
plt.xlim(0, 0.2)
plt.xticks([])
plt.yticks([])

plt.show()

这里写图片描述

本文介绍了一些常用的技巧,想了解更多Matlibplot数据可视化内容,请参考:

(1)http://python.jobbole.com/85106/
(2)http://www.cnblogs.com/vamei/archive/2013/01/30/2879700.html#commentform

  • 12
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值