利用matplotlib+numpy绘制多种绘图的方法实例


Posted in Python onMay 03, 2017

前言

matplotlib 是Python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。本文将以例子的形式分析matplot中支持的,分析中常用的几种图。其中包括填充图、散点图(scatter plots)、. 条形图(bar plots)、等高线图(contour plots)、 点阵图和3D图,下面来一起看看详细的介绍:

一、填充图

参考代码

from matplotlib.pyplot import *
x=linspace(-3,3,100)
y1=np.sin(x)
y2=np.cos(x)
fill_between(x,y1,y2,where=(y1>=y2),color='red',alpha=0.25)
fill_between(x,y1,y2,where=(y<>y2),color='green',alpha=0.25)
plot(x,y1)
plot(x,y2)
show()

简要分析

这里主要是用到了fill_between函数。这个函数很好理解,就是传入x轴的数组和需要填充的两个y轴数组;然后传入填充的范围,用where=来确定填充的区域;最后可以加上填充颜色啦,透明度之类修饰的参数。

当然fill_between函数还有更加高级的用法,详见fill_between用法或者help文档。

效果图

利用matplotlib+numpy绘制多种绘图的方法实例

二、散点图(scatter plots)

参考代码

from matplotlib.pyplot import *
n = 1024
X = np.random.normal(0,1,n)
Y = np.random.normal(0,1,n)
T = np.arctan2(Y,X)
scatter(X,Y, s=75, c=T, alpha=.5)
xlim(-1.5,1.5)
ylim(-1.5,1.5)
show()

简要分析

首先介绍一下numpy 的normal函数,很明显,这是生成正态分布的函数。这个函数接受三个参数,分别表示正态分布的平均值,标准差,还有就是生成数组的长度。很好记。

然后是arctan2函数,这个函数接受两个参数,分别表示y数组和x数组,然后返回对应的arctan(y/x)的值,结果是弧度制。

接下来用到了绘制散点图的scatter方法,首先当然是传入x和y数组,接着s参数表示scale,即散点的大小;c参数表示color,我给他传的是根据角度划分的一个数组,对应的就是每一个点的颜色(虽然不知道是怎么对应的,不过好像是一个根据数组内其他元素进行的相对的转换,这里不重要了,反正相同的颜色赋一样的值就好了);最后是alpha参数,表示点的透明度。

至于scatter函数的高级用法可以参见官方文档scatter函数或者help文档。

最后设置下坐标范围就好了。

效果图

利用matplotlib+numpy绘制多种绘图的方法实例

三、条形图(bar plots)

参考代码

from matplotlib.pyplot import *
n = 12
X = np.arange(n)
Y1 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n)
Y2 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n)
bar(X, +Y1, facecolor='#9999ff', edgecolor='white')
bar(X, -Y2, facecolor='#ff9999', edgecolor='white')
for x,y in zip(X,Y1):
 text(x+0.4, y+0.05, '%.2f' % y, ha='center', va= 'bottom')
for x,y in zip(X,Y2):
 text(x+0.4, -y-0.05, '%.2f' % y, ha='center', va= 'top')
xlim(-.5,n)
xticks([])
ylim(-1.25,+1.25)
yticks([])
show()

简要分析

注意要手动导入pylab包,否则会找不到bar。。。

首先用numpy的arange函数生成一个[0,1,2,…,n]的数组。(用linspace也可以)

其次用numpy的uniform函数生成一个均匀分布的数组,传入三个参数分别表示下界、上界和数组长度。并用这个数组生成需要显示的数据。

然后就是bar函数的使用了,基本用法也和之前的plot、scatter类似,传入横纵坐标和一些修饰性参数。

接着我们需要用for循环来为柱状图显示数字:用python的zip函数将X和Y1两两配对并循环遍历,得到每一个数据的位置,然后用text函数在该位置上显示一个字符串(注意位置上的细节调整)。text传入横纵坐标,要显示的字符串,ha参数制定横向对齐,va参数制定纵向对齐。

最后调整下坐标范围,并且取消横纵坐标上的刻度以保持美观即可。

至于bar函数的具体用法可以参照bar函数用法或者help文档。

效果图

利用matplotlib+numpy绘制多种绘图的方法实例

四、等高线图(contour plots)

参考代码

from matplotlib.pyplot import *
def f(x,y):
 return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
n = 256
x = np.linspace(-3,3,n)
y = np.linspace(-3,3,n)
X,Y = np.meshgrid(x,y)
contourf(X, Y, f(X,Y), 8, alpha=.75, cmap=cm.hot)
C = contour(X, Y, f(X,Y), 8, colors='black', linewidth=.5)
clabel(C, inline=1, fontsize=10)
show()

简要分析

首先要明确等高线图是一个三维立体图,所以我们要建立一个二元函数f,值由两个参数控制,(注意,这两个参数都应该是矩阵)。

然后我们需要用numpy的meshgrid函数生成一个三维网格,即,x轴由第一个参数指定,y轴由第二个参数指定。并返回两个增维后的矩阵,今后就用这两个矩阵来生成图像。

接着就用到coutourf函数了,所谓contourf,大概就是contour fill的意思吧,只填充,不描边;这个函数主要是接受三个参数,分别是之前生成的x、y矩阵和函数值;接着是一个整数,大概就是表示等高线的密度了,有默认值;然后就是透明度和配色问题了,cmap的配色方案这里不多研究。

随后就是contour函数了,很明显,这个函数是用来描线的。用法可以类似的推出来,不解释了,需要注意的是他返回一个对象,这个对象一般要保留下来个供后续的加工细化。

最后就是用clabel函数来在等高线图上表示高度了,传入之前的那个contour对象;然后是inline属性,这个表示是否清除数字下面的那条线,为了美观当然是清除了,而且默认的也是1;再就是指定线的宽度了,不解释,。

效果图

利用matplotlib+numpy绘制多种绘图的方法实例

五、点阵图

参考代码

from matplotlib.pyplot import *
def f(x,y):
 return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
n = 10
x = np.linspace(-3,3,3.5*n)
y = np.linspace(-3,3,3.0*n)
X,Y = np.meshgrid(x,y)
Z = f(X,Y)
imshow(Z,interpolation='nearest', cmap='bone', origin='lower')
colorbar(shrink=.92)
show()

简要分析

这段代码的目的就是将一个矩阵直接转换为一张像照片一样的图,完整的进行显示。

前面的代码就是生成一个矩阵Z,不作解释。

接着用到了imshow函数,传人Z就可以显示出一个二维的图像了,图像的颜色是根据元素的值进行的自适应调整,后面接了一些修饰性的参数,比如配色方案(cmap),零点位置(origin)。

最后用colorbar显示一个色条,可以不传参数,这里传进去shrink参数用来调节他的长度。

效果图

利用matplotlib+numpy绘制多种绘图的方法实例

六、3D图

参考代码

import numpy as np
from pylab import *
from mpl_toolkits.mplot3d import Axes3D
fig = figure()
ax = Axes3D(fig)
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.cm.hot)
ax.contourf(X, Y, Z, zdir='z', offset=-2, cmap=plt.cm.hot)
ax.set_zlim(-2,2)
show()

简要分析

有点麻烦,需要用到的时候再说吧,不过原理也很简单,跟等高线图类似,先画图再描线,最后设置高度,都是一回事。

效果图

利用matplotlib+numpy绘制多种绘图的方法实例

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
使用Python来开发Markdown脚本扩展的实例分享
Mar 04 Python
Python 实现文件的全备份和差异备份详解
Dec 27 Python
python实现简单聊天应用 python群聊和点对点均实现
Sep 14 Python
基于python list对象中嵌套元组使用sort时的排序方法
Apr 18 Python
python遍历一个目录,输出所有的文件名的实例
Apr 23 Python
python smtplib模块自动收发邮件功能(一)
May 22 Python
python scp 批量同步文件的实现方法
Jan 03 Python
python shell命令行中import多层目录下的模块操作
Mar 09 Python
Django Admin设置应用程序及模型顺序方法详解
Apr 01 Python
python requests.get带header
May 05 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
Sep 29 Python
python全面解析接口返回数据
Feb 12 Python
Pycharm学习教程(5) Python快捷键相关设置
May 03 #Python
python中解析json格式文件的方法示例
May 03 #Python
Pycharm学习教程(4) Python解释器的相关配置
May 03 #Python
Pycharm学习教程(3) 代码运行调试
May 03 #Python
在centos7中分布式部署pyspider
May 03 #Python
python3读取MySQL-Front的MYSQL密码
May 03 #Python
Python判断变量是否为Json格式的字符串示例
May 03 #Python
You might like
php实现微信扫码自动登陆与注册功能
2016/09/22 PHP
javascript iframe中打开文件,并检测iframe存在否
2008/12/28 Javascript
XENON基于JSON变种
2010/07/27 Javascript
JS拖动鼠标画出方框实现鼠标选区的方法
2015/08/05 Javascript
jquery制做精致的倒计时特效
2016/06/13 Javascript
JS实现简单的右下角弹出提示窗口完整实例
2016/06/21 Javascript
浅谈JavaScript对象与继承
2016/07/10 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
2017/02/08 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
浅谈JS封闭函数、闭包、内置对象
2017/07/18 Javascript
laydate日历控件使用方法详解
2017/11/20 Javascript
Vuex提升学习篇
2018/01/11 Javascript
对Angular中单向数据流的深入理解
2018/03/31 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
2018/09/27 Javascript
详解关于Angular4 ng-zorro使用过程中遇到的问题
2018/12/05 Javascript
webpack结合express实现自动刷新的方法
2019/05/07 Javascript
ES6 Class中实现私有属性的一些方法总结
2019/07/08 Javascript
Jquery让form表单异步提交代码实现
2019/11/14 jQuery
在vant 中使用cell组件 定义图标该图片和位置操作
2020/11/02 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
Python连接phoenix的方法示例
2017/09/29 Python
Python基于pycrypto实现的AES加密和解密算法示例
2018/04/10 Python
Python GUI编程 文本弹窗的实例
2019/06/11 Python
Python count函数使用方法实例解析
2020/03/23 Python
html5教程实现Photoshop渐变色效果
2013/12/04 HTML / CSS
英国汽车和货车租赁网站:Hertz英国
2016/09/02 全球购物
澳大利亚珠宝商:Shiels
2019/10/06 全球购物
学生实习推荐信范文
2013/11/26 职场文书
考试不及格检讨书
2014/01/09 职场文书
主持人婚宴答谢词
2014/01/28 职场文书
心理健康日活动总结
2014/05/08 职场文书
2014年学校党建工作汇报材料
2014/11/02 职场文书
Jsonp劫持学习
2021/04/01 PHP
用JS实现飞机大战小游戏
2021/06/09 Javascript
德生2P3收音机开箱评测
2022/04/30 无线电