python系列三.2(ipython图形化交互)
2017-08-23 11:27
113 查看
IPython绘图和可视化---matplotlib 入门
最近总是需要用matplotlib绘制一些图,由于是新手,所以总是需要去翻书来找怎么用,即使刚用过的,也总是忘。所以,想写一个入门的教程,一方面帮助我自己熟悉这些函数,另一方面有比我还小白的新手可以借鉴,大神就绕路吧。这篇文章是根据《利用Python进行数据分析》总结出来的,不是很全面,但是作为入门,足够了。首先,需要能启动IPython 交互界面吧,这个如果还没有启动的话,就自行百度吧。
如果安装了Anaconda,那么以这种方式启动IPython吧。
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922124553356-518686822.png)
这样会将IPython配置为使用你所指定的matplotlib GUI 后端(Tk,wxPython,PyQt,Mac OS X native,GTK)。【虽然不知道这些都是些什么,不过打开pylab就够用了】
matplotlib 不是太长了吗,我们通常引入这样的约定:
import matplotlib.pyplot as plt
就是个缩写嘛,大多数高端人员也遵循这个约定,咱就服从吧。
首先,我们来绘制一个figure对象。
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922125327168-55124486.png)
立马就会生成一个这样的窗口:
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922125355387-932857319.png)
好,这是第一步。
但是不能通过空figure绘图。必须使用add_subplot()创建一个或多个subplot才行。
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922130044199-1768900731.png)
看以上三行代码,figure变成了这样:
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922130110152-395171014.png)
这三行代码的意思是:图像是2X2的,且当前选中是4个中的第n个。(222)就是2X2 中的第二2,(2,2,3)就是2X2中的第三个。可分割也可不分割,当超过10的话需要分割了吧。
好,第二步也成功做完了。接下来,发出一条绘图命令。如plt.plot([1.5, 2, 4, -2, 1.6]) #绘制几个点连接
我们来试一下。
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922130539668-1994792287.png)
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922130548402-837708128.png)
恩,此时matplotlib就会在最后一个用过的subplot(如果没有则创建一个)上面进行绘制。
这几步完成的还不错吧,那下面我们再进一步探索。
*************************************************分割线****************************************************
我们运行一下这两行代码:
from numpy.random import randn #导入随机模块
plt.plot(randn(50).cumsum(), 'k--')
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922131026699-937481027.png)
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922131033996-1184390500.png)
其实就是在0到50随机生成一个数组,然后绘制在最后一个用过的subplot里面,注意是线段类型,虚线。
那如何绘制图像在其他的subplot里面呢?下面就演示如何做。
ax1.hist(randn(100), bins = 20, color = 'k', alpha = 0.3)
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922132356231-1749364060.png)
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922132402621-577323662.png)
ax2.scatter(np.arange(30), np.arange(30) + 3 * randn(30))
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922132709418-1437886685.png)
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922132754199-1160989462.png)
至此,应该能非常熟练的在figure对象中绘图了吧。
还可以在matplotlib的文档中找到各种图表类型。
**********************************************分割线**********************************************************
由于根据特定布局创建Figure和subplot是一件很常见的任务,于是便出现了一个更为方便的方法。
fig, axes = plt.subplots(2, 3)
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922133125715-1712990904.png)
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922133134199-251526351.png)
这样,一步就完成上节两步完成的工作。
-----------------------------------------------------------------------
pyplot.subplots有几个选项
nrows:subplot的行数
ncols:subplot的列数
sharex:所有subplot共享x轴刻度
sharey:所有subplot共享Y轴刻度
subplot_kw:用于创建各subplot的关键字字典
**fig_kw:创建figure时的其他关键字,如plt.subplots(2,2,figuresize=(8,6))
-------------------------------------------------------------------------
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922134550262-333186656.png)
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922134558402-1753692493.png)
加了参数,共享x轴y轴。
我们再试着调整一下subplot周围的边距。
Figure有一个顶级函数subplot_adjust。
subplots_adjust(left = None, bottom = None, right = None, top = None, wsapce = None, hspace = None )
wspace 和 hspace是控制宽度和高度的百分比。下面将间距收缩到了0.
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922135118324-1930447207.png)
又是新知识吧。接下来,学习颜色和线型。
************************************分割线**************************************************
新建一个fig
fig = plt.plot()
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922141646027-740925717.png)
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922141653106-797424241.png)
再新建一个fig
data = randn(30).cumsum()
plt.plot(data, 'k--', label = 'Default')
plt.plot(data, 'k-', drawstyle = 'steps-post', label = 'steps-post')
plt.legend(loc='best') #在合适的位置放置图例。
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922142617777-266007063.png)
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922142629949-1788134700.png)
设置标题,轴标签,刻度以及刻度标签。
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(randn(1000).cumsum())
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922143040856-357995086.png)
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922143046746-507905842.png)
随机漫步。我们来给上图添加标签。
ticks = ax.set_xtickets([0, 250, 500, 750, 1000])
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922143354793-2028066885.png)
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922143400621-1802493626.png)
可以看出,x标签变成我们制定的标签。y轴标签可想而知了。
再来设置title
ax.set_title('My First matplotlib plot')
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922143815887-660340434.png)
再用set_xlabel为X轴设置一个名称。
ax.set_xlabel('Stages')
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922144132309-1267570214.png)
Y轴的跟X轴几乎是一样的。再小白也能看懂吧。
添加图例(legend):
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922145021137-608135048.png)
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922145027996-444809553.png)
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922145041652-1792994805.png)
上面两张图是一样的,后面只是上面图放大了,注意图例的位置。
ax.legend(loc = 'best') #会选择一个最不碍事的位置。
要从图例中去除一个或多个元素,不传入label或传入lable = '_nolegend_'
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160922150643074-1540966074.png)
还有一些这样的选项。
***************************************************分割线*****************************************************
又上一层楼。 嘻嘻。
好了,一口气写这么些,后面的再慢慢更新吧。
今天接着入门,白小白可以看,大神绕路。
***************************************************分割线*****************************************************
今天接着入门,白小白可以看,大神绕路。
今天以画图开始。
画个长方形,三角形,圆形(椭圆)。
Matplotlib有一些表示常见图形的对象,这些对象被称为块(patch)。完整的集合位于matplotlib.patches。
fig = plt.figure()
ax = fig.add_subplot(111)
rect = plt.Rectangle((0.2,0.75), 0.4, 0.15, color = ‘r’, alpha = 0.3)#左下起点,长,宽,颜色,α
circ = plt.Circle((0.7,0.2), 0.15, color = ‘b’, alpha = 0.5)#圆心,半径,颜色,α
pgon = plt.Polygon([[0.15, 0.15], [0.35, 0.4], [0.2, 0.6]], color = ‘g’, alpha = 0.5 )#顶点坐标颜色α
α表示的是图表的填充不透明度。在(0,1)之间。
ax.add_patch(rect)
ax.add_patch(circ)
ax.add_patch(pgon)
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160927101408688-103727523.png)
补充一个:如何在图上指定位置添加文本、箭头,或其他图形呢?
答:可以通过text、arrow、annotate等函数进行添加。下面看一个添加文本的例子。
ax.text(0.7, 0.6, ‘Hello World!’, family = ‘monospace’, fontsize = 10)
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160927101424985-523686570.png)
可以看到图片里面指定位置有我们添加的文字信息。
那生成了图表文件怎么保存呢?
利用plt.savefig可以将当前图表保存到文件。
Plt.savefig(‘figpath.svg’, dpi = 400, bbox_inches = ‘tight’ )
#文件类型是通过文件扩展名推断出来的,可以保存为.pdf.
Dpi是 ‘每英寸点数’分辨率,bbox_inches可以剪除当前图表周围的空白部分
![](http://images2015.cnblogs.com/blog/853854/201609/853854-20160927101443172-108179876.png)
保存到了一个.pdf的文件中。
Figure.savefig有一下选项:
Fname: 含有路径的字符串或python文件型对象。.pdf,.png根据扩展名推断得出。
dpi: 图像分辨率(每英寸点数),默认为100
facecolor,edgecolor: 图像的背景色,默认为‘w’(白色)
format: 显式设置文件格式(‘png’,‘pdf’,‘svg’,‘ps’,‘eps’…)
bbox_inches:图表需要保存的部分。如果设置为‘tight’,则尝试剪除图表周围的空白部分。
***********************分割线********************************
Matplotlib实际上是一种比较低级的绘图工具。要组装一章图表,你得用它的各种基础组件才行。下面介绍一下pandas中的绘图函数。简单入门级别的集中。
************************分割线*******************************
线型图:
Series和DataFrame都有一个用于生成各类图表的plot方法。默认情况下,他们所生成的是线型图。
s = Series(na.random.randn(10).cumsum(), index = np.arange(0,100,10))
s.plot()
相关文章推荐
- 【Python】ipython 快捷键 魔术命令 以及系统交互命令
- Spark中的python shell交互界面Ipython和jupyter notebook
- Python用pip安装IPython/Jupyter最佳交互环境
- python------ipython交互工具
- python交互模式下方向键、退格键出现乱码及ipython的安装
- IPython(jupyter)简单介绍和基本交互操作 - 千月的python linux 系统管理指南学习笔记(5)
- 安装Pythonshell交互编辑器 IPython
- ipython 最好用的交互python环境
- 【Python学习系列十四】IPython命令行式交互界面工具Jupyter
- python系列三.1(python和ipython)
- 【工具使用系列】Python FAQs: Spyder(winPython, Python(x,y), Anaconda)下,如何使用ipython --pylab!
- 【python系列】Python启动外部程序,以及进程间交互
- Python 手册——参数传递以及交互模式
- 用python玩微信跳一跳系列-色块轮廓定位棋盘
- Python与C++数据交互编码问题
- Python系列课程——中国大学MOOC
- (原创)Python文件与文件系统系列(1)—— file 对象
- python剑指offer系列和为S的连续正数序列
- 机器学习实践系列 1 线性代数计算的python实现
- 用Python简化安卓开发系列