matplotlib绘图基本用法-转自(http://blog.csdn.net/mao19931004/article/details/51915016)
本文转载自http://blog.csdn.net/mao19931004/article/details/51915016
分类:
因为学习机器学习以及试图通过python实现相应的算法,因此学习了Matplotlib中的画图,那么就问到,问啥不用matlab呢,答:多一门技术,多一口饭;而且发现Matplotlib的画图功能还是蛮强大的,这次仅仅只是学习了以前在MATLAB里面会的相应的东西,然后学习一下在python中对应的知识。
matplotlib在Python中应用最多的2D图像的绘图工具包,使用matplotlib能够非常简单的可视化数据。在matplotlib中使用最多的模块就是pyplot。pyplot非常接近Matlab的绘图实现,而且大多数的命令及其类似Matlab.当然,与Matlab类似,需要很多的数学运算,因此numpy这个组件同样是必不可少的。所以很多人说python+matplotlib+numpy就是MATLAB。当然在此之前,需要配置好相应的环境,在Linux 14.04下版本,利用sublime Text 3可以非常快捷的搭建好开发环境,可以参见博客http://blog.csdn.net/mao19931004/article/details/51834616。
首先,在matplotlib建议使用别名,引入包,这样方便以后模块的使用,一般以以下两句开始:
import numpy as np import matplotlib.pyplot as plt
接下来以绘制正弦余弦函数曲线为例,介绍相应的函数。
- 使用默认的绘图属性绘图
x=np.linspace(-np.pi,np.pi,256,endpoint=True) C,S=np.cos(x),np.sin(x) plt.plot(x,C) plt.plot(x,S)
- 对线条的颜色,宽度进行设置,就像在matlab中一样:
plt.plot(x,C,color='red',linewidth=2.5,linestyle='-') plt.plot(x,S,color='blue',linewidth=2.5,linestyle='-')
- 对plot函数的讲解
上面介绍了简单的绘图,用的基本上都是plot,因此有必要对plot函数进行简单的介绍。官网参考网址:plot使用。熟悉Matlab的人对plot不会陌生,在matplotlib中的使用方式大致和Matlab中是一致的,使用plot,可以对点的标记的样式以及线条的样式进行设置。
函数的声明为:matplotlib.pyplot.plot(*args, **kwargs)。args的参数的长度是不定
的,可以设置很多的属性,kwargs主要是应用于设置线条的属性。对于标注和线条的样式,可以通过简单的字符来表示:
以及标注和线条的颜色:
当然线条的颜色可以以其他方式定制。比如16进制的字符串('#008000')或者是RGB、RGBA元组的方式RGB
or RGBA ((0,1,0,1)) 来实现不同的颜色。
在接下来会应用到更多的属性。对于Line2D的具体细节,也就是线条的属性等,可以进一步查阅Line2D.
- 设置横轴、纵轴的界限以及标注
很多时候,需要设置横轴和纵轴的界面,从而得到更加清晰明了的图形:
plt.xlim(X.min()*1.1, X.max()*1.1) plt.ylim(C.min()*1.1, C.max()*1.1)此外为了更好的表示横轴和纵轴数据的含义,可以通过ticks对横轴和纵轴的含义进行设置和定制。
plt.xlim(x.min()*1.1, x.max()*1.1)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
[r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
plt.ylim(C.min()1.1,C.max()1.1)
plt.yticks([-1, 0, +1],
[r'$-1$', r'$0$', r'$+1$'])
看到yticks和xticks后面一串的数字,看到就觉得可能有点不知道写的什么,熟悉LaTex的人觉得我们这种想法的人有点傻。其实就是很简单的字符串,但是是为了方便Latex去解析这段字符串。一般以r开始,中间的字符串用$字符串$包围起来。这里是matplotlib中的有关LaTex的使用介绍:Latex的使用
上面的\pi代表的意义就是π。以下是有关希腊字符的表示:
最后的显示图像为:
这样数据的意义就更加清晰明了了。
- 设置Spines的位置。
Spines are the lines connecting the axis tick marks and noting the boundaries of the data area. They can be placed at arbitrary positions。
Spines应该可以理解为坐标轴的位置。但是也不全是,因为它分为上下左右四个位置,就如上图的四个边界,那么左边界和下边界就是我们通常认为的横坐标和纵坐标。我们可以将上边界和右边界隐藏,同时将左边界和下边界移动至中心的位置,看看效果:
这样就和我们通常画数学曲线的方式就一样了。
实现的完整代码是:
import numpy as np import matplotlib.pyplot as pltax = plt.subplot(111)
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))x=np.linspace(-np.pi,np.pi,256,endpoint=True)
C,S=np.cos(x),np.sin(x)plt.plot(x,C,color='red',linewidth=2.5,linestyle='-',label=r'$cos(t)$')
plt.plot(x,S,color='blue',linewidth=2.5,linestyle='-',label=r'$sin(t)$')plt.xlim(x.min()1.1, x.max()1.1)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
[r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])plt.ylim(C.min()1.1,C.max()1.1)
plt.yticks([-1, 0, +1],
[r'$-1$', r'$0$', r'$+1$'])
plt.show()
- 添加图例说明
说到作图,当然必须要有图例,图例是帮助我们理解曲线指代的类型,如果让我们不去仔细分析曲线,就可以知道曲线指代的类型。比如上图的正弦和余弦,我们要经过分析过后,才知道红色是余弦函数,蓝色是正弦函数,因此图例就非常重要的帮助我们分析图形。
在画图时候,我们需要多线条加上label,这样才可以在最后将图例显示出来。
plt.plot(x,C,color='red',linewidth=2.5,linestyle='-',label=r'$cos(t)$') plt.plot(x,S,color='blue',linewidth=2.5,linestyle='-',label=r'$sin(t)$') plt.legend(loc='upper left',frameon=False)
位置的可选参数有:
函数的参数的关键字有:
大致的plot的绘图方式入门就这么多,当然plot还有很多很多的内容,需要的什么比较好的方式绘图,就可以去参阅相关的资料,当然以后如果遇到新的内容,会继续介绍。
- 上一篇 Qt (六) -- Qt5.5.1实现通用串口程序
下一篇
numpy简单入门学习
Python 绘图 Matplotlib 快速参考手册
http://www.labri.fr/perso/nrougier/teaching/matplotlib/#quick-references
1 作图函数
1.1 默认参数作图import n...
- claroja
- 2017年04月18日 13:34
- 2201
使用 python Matplotlib 库绘图
Matplotlib的安装可以参见 官网链接 http://matplotlib.org/users/installing.html下面总结步骤如下:
windows 注意下载.exe格式 直接安...
- gfsfg8545
- 2013年08月02日 12:59
- 44921
matplotlib绘图实例:pyplot、pylab模块及作图参数

- pipisorry
- 2014年10月12日 00:47
- 55438
- 文章搜索
- 文章分类
- 文章存档
- 阅读排行
人脸检测--基于Adaboost算法的实现
(8884)
Qt (六) -- Qt5.5.1实现通用串口程序
(8273)
QMediaplayer详解以及简易音乐播放实现
(7720)
Matplotlib简单入门学习
(7403)
Ubantu下配置Sublime Text3---python环境的搭建
(7380)
Qt中多线程的使用
(5948)
人脸检测---基于肤色检测的实现
(5645)
VS2013下使用OpenCV2.4.9打开摄像头并且显示
(5229)
Qt(二)--- 使用Qt完成QQ登录界面的输入文本框的实现
(4497)
关于OpenCV中rectangle函数的使用+统计直方图
(4438)
- 最新评论
Qt+opencv 图像目标标定
u010462037:
博主好,你的鼠标坐标转图像坐标的函数我试了一下,画出的矩形有偏差,计算是不是有问题?
QMediaplayer详解以及简...
rubberfeng:
[reply]jiangtwo[/reply]
首先感谢你的回答,我已经解决了这个问题了,自己重写...
QMediaplayer详解以及简...
jiangtwo:
[reply]rubberfeng[/reply]
不平滑的原因是视频时间太短,进度条长的情况下,...
QMediaplayer详解以及简...
rubberfeng:
请问你对positionChanged(qint64)的消息频率熟悉吗?你做这个我也做了,但是问题...
Qt中多线程的使用
wuqi_seu:
你好,我想请问一下,在采集的过程中,任务应该是加入了eventloop(称为任务A),你在主线程中...
Qt(五)--- 文件操作以及实现...
F1ynn_Zhan9:
谢谢分享!
人脸检测---基于肤色检测的实现
shouliezhecs:
那你发上来是什么意思?装B吗?
Qt (六) -- Qt5.5.1...
mao19931004:
[reply]qq_35786731[/reply]
http://download.csdn.n...
Qt (六) -- Qt5.5.1...
qq_35786731:
能发下工程不
Ubantu下配置Sublime ...
Mundane_World:
ubuntu 16.04下,背景能透明么,VIEW菜单栏下有window‘s transparen...
目录视图
摘要视图
订阅
浙公网安备 33010602011771号
查看评论