《Python数据分析实战》
matplotlib优点:
1.matplotlib架构
matplotlib的主要任务之一,就是提供一套表示和操作图形对象(主要对象)以及它的内部对象的函数和工具。
然而,matplotlib不仅可以处理图形,还提供事件处理工具,具有为图形添加动画效果的能力。有了这些附加功能,matplotlib就能够生成以键盘按键或鼠标移动的事件的交互式图表。
从逻辑上来讲,matplotlib的整体架构由位于三个不同层级的三层组成。各层之间单向通信,即每一层只能与它的下一层通信,而下层无法与上层通信。
matplotlib的架构分为以下三层:
Backend(后端)层:
最下面一层为Backend层。matplotlib API即位于该层,这些API是用来再底层实现图形元素的一个个类。
Artists(表现)层:
中间层为Artist层。图形中所有能看到的元素都属于Artist对象,即标题、轴标签、刻度等组成图形的所有元素都是Artist对象的实例。图形中的每个元素的实例再层级结构中有着自己的位置。
图表的各元素分别对应一个Artist实例,所有实例形成层级结构。
Artist类分为两种:原始(primitive)和复合(composite)。
绘制Line2D或矩形、圆形等几何图形,甚至文本等图形时,形成图形表示的基础元素由primitive artist单个对象组成。
由多个基础元素—primitive artist—组成的图表中的图像元素叫作composite artist,例如Axis(单条轴)、Ticks(刻度)、Axes(轴)和Figure(图形)。
一般而言,在中国阶段(Artist),你通常需要处理Figure、Axes和Axis等位于高层级的对象。因此,透彻理解这些对象和它们在图形表示中所扮演的角色很重要。
Figure对象在Artist层的最上面,对应整个图形表示,通常可包含多条轴(Axes)。
Axes对象通常表示图形或图表是对什么内容进行作图的。每个Axes对象只属于一个Figure对象,由两个(三维就有三个)Artist Axis对象组成。标题、x标签和y标签等对象都属于Axes这个composite artist类型的对象。
Axis对象负责展示在Axes对象上面的数值,定义数值分为,管理刻度(轴上的标记)和刻度值标签(代表每个刻度大小的文本标签)。刻度的位置用Locator对象调整,刻度标签的格式用Formatter对象调整。
Scripting(脚本)层:
Artist类和相关函数(matplotlib API)非常适合开发人员,尤其时Web应用服务器或GUI开发者使用。但是对于计算,尤其是数据分析和可视化,Scripting层最适合。该层包含pyplot接口。
pylab和pyplot:
pylab在同一命名空间整合了pyplot和Numpy的功能,因此无需再单独导入Numpy。更进一步来说,导入pylab后,pyplot和Numpy的函数就可以直接调用,而不用再指定其所属模块(命名空间),从而使得matplotlib开发环境更像是Matlab。
#1.pylab
from pylab import *
plot(x,y)
array([1,2,3,4])
#2.pyplot
import matplotlib.pyplot as plt
import numpy as np
plt.plot()
np.array([1,2,3,4])
2.pyplot
pyplot具有状态性特征,它能跟踪当前图形和绘图区域得状态。调用函数时,函数只对当前图形起作用。
生成一幅简单得交互式图表:
import matplotlib.pyplot as plt
x = np.array([1,2,3,4])
y = np.array([2,3,4,5])
plt.plot(x,y)
plt.show()
#只传入一组值
plt.plot([1,2,3,4])
plt.show()
如果只是将一个数字列表或数组传递给plt.plot()函数,matplotlib就会假定你所传入的是图表的y值,于是将其跟一个序列的x值对应起来,x的取值依次为0、1、2、3……
通常,图形表示的是一对对的(x,y),因此如果你想正确定义图表,必须定义两个数组,其中第一个数组为x轴的各个值,第二个数组为y轴的值。此外,plot()函数还可以接收第三个参数,它描述的是数据点在图表中的显示方式。
设置图形得属性:
#1.定义数据点在图表中的显示方式
plt.plot(x,y,'ro')
plt.show()
#2.[xmin,xmax,ymin,ymax]定义x轴和y轴的取值范围;title()添加标题
plt.axis([0,5,0,20])
plt.title('my first plot')
plt.plot([1,2,3,4],[1,4,9,19],'ro')
附注:plot控制颜色、线型、标记风格
(1)控制颜色
颜色之间的对应关系为
b—blue c—cyan g—green k—-black
m—magenta r—red w—white y—-yellow
有三种表示颜色的方式:
a:用全名
b:16进制如:#FF00FF
c:RGB或RGBA元组(1,0,1,1)
d:灰度强度如:‘0.7
(2)控制线型
- 实线
– 短线
-. 短点相间线
: 虚点线
(3)控制标记风格
. Point marker
, Pixel marker
o Circle marker
v Triangle down marker
^ Triangle up marker
< Triangle left marker
> Triangle right marker
> 1 Tripod down marker
2 Tripod up marker
3 Tripod left marker
4 Tripod right marker
s Square marker
p Pentagon marker
* Star marker
h Hexagon marker
H Rotated hexagon D Diamond marker
d Thin diamond marker
| Vertical line (vlinesymbol) marker
_ Horizontal line (hline symbol) marker
+ Plus marker
x Cross (x) marker
代码示例:
import matplotlib.pyplot as plt
import numpy as np
y = np.arange(1, 3, 0.3)
plt.plot(y, 'cx--', y+1, 'mo:', y+2, 'kp-.');
plt.show()
参考文章:https://blog.csdn.net/kkxgx/article/details/6951959
matplotlib和Numpy:
尽管Matplot是一个图形库,它却以Numpy库作为基础。你已经见过如何传递列表作为参数,以表示数据点和设置轴的数值范围。这些列表在内部实际上被转换为Numpy数组。
因而你可以直接把Numpy数组作为输入数据。数组经过pandas处理后,无需做进一步处理,可直接供matplotlib使用。
import math
t = np.arange(0,2.5,0.1)
y1 = map(math.sin,math.pi*t)
y2 = map(math.sin,math.pi*t+math.pi/4)
y3 = map(math.sin,math.pi*t-math.pi/4)
plt.plot(t,y1,'b*',t,y2,'g^',t,y3,'ys')
3.使用kwargs
组成图表的各个对象有很多用以描述它们特点的属性。这些属性均有默认值,但可以用关键字参数(keyword args,常称作kwargs)设置。
在matplotlib库各个函数的参考文档中,每个函数的最后一个参数总是kwargs。例如,前几个例子一直在使用的plot()函数在文档中是这么定义的:
matplotlib.pyplot.plot(*args,**kwargs)
实例:
#设置linewidth关键字参数,可以改变线条的粗细
plt.plot([1,2,4,2,1,0,1,2,1,4],linewidth=2.0)
处理多个Figure和Axes对象:
至此,你见过的所有pyplot命令都是用来绘制单个图形的。其实,你可以同时管理多个图形,而在每个图形中,又可以绘制几个不同的子图。
因此,使用pyplot时,必须时刻注意当前Figure对象和当前Axes对象的概念(也就是Figure对象中当前所显示的图形)。
subplot()函数不仅可以将图形分为不同的绘图区域,还能激活特定子图,以便用命令控制。
t = np.arange(0,5,0.1)
y1 = np.sin(2*np.pi*t)
y2 = np.sin(2*np.pi*t)
plt.subplot(211)
plt.plot(t,y1,'b-.')
plt.subplot(212)
plt.plot(t,y2,'r--')
plt.show()
4.为图表添加更多元素
这一节将学习如何为图标添加文字标签、图例等元素。
添加文本:
title() 用于添加标题。
xlabel()和ylabel()函数专门用于添加轴标签。
plt.axis([0,5,0,20])
plt.title('My first plot')
plt.xlabel('Counting')
plt.ylabel('Square values')
plt.plot([1,2,3,4],[1,4,9,16],'ro')
plt.show()
我们还可以用关键字参数修改文本属性。例如,你可以修改标题的字体,使用更大的字号。你还可以指定轴标签的颜色为灰色,从而反衬出图形的标题。
#关键字参数示例
plt.axis([0,5,0,20])
plt.title('My first plot',fontsize=20,fontname='Times New Roman')
plt.xlabel('Counting',color='gray')
plt.ylabel('Square values',color='gray')
注意:pyplot允许你在图表任意位置添加文本。这个功能由text()函数来实现。
text(x,y,s,fontdict=None,**kwargs)
x和y参数为文本在图形中位置的坐标。s为要添加的字符串,fontdict(可选)为文本要使用的字体。最后,还可以使用关键字参数。
#plt.text()示例
plt.text(1,1.5,'First')
plt.text(2,4.5,'Second')
plt.text(3,9.5,'Third')
plt.text(4,16,'Fourth')
matplotlib整合了LaTeX表达式,支持在图表中插入数学表达式。
将表达式内容置于两个$符号之间,可在文本中添加LaTeX表达式。解释器会将该符合之间的文本识别成LaTeX表达式,把它们转换为数学表达式、公式、数学字符串或希腊字母等,然后再图像中显示出来。通常,你需要在包含LaTeX表达式的字符串前添加r字符,表明它后面时原始文本,不能对其进行转义操作。
#插入LaTex示例
plt.text(1.1,12,r$y = x^2$,fontsize=20,bbox={'facecolor':'yellow','alpha':0.2})
添加网格:
图形中可以添加的另一个元素时网格。添加网格能更好地理解图表每个数据点的位置,因此往往很有必要。
在图表中添加网格其实很简单:直接在代码中加入grid()函数,传入参数True。
plt.grid(True)
plt.plot([1,2,3,4],[1,4,9,16],'ro')
添加图例:
另外一个任何图表都应该有的元素时图例。pyplot专门提供了legend()函数,用于操作该类对象。使用legend()函数将图例和字符串类型的图例添加到图表中。
plt.legend(['First series'])
图例默认情况下添加到图形的右上角。如果要修改图例的位置,还是需要添加几个关键字参数。
例如,图例的位置由loc关键字控制,其取值范围为0-10。每个数字代表图表中的一处位置,默认位置为1,也就是右上角位置。
保存图表
1.保存代码:
你可以使用%save魔术命令,后面跟着你想使用的文件名和代码对应的命令提示符号码(也就是对应的行数)。
import numpy as np
import pandas as pd
a = np.array([1,2,3,4])
for i in a:
print(i)
#保存代码
%save my_first_chart 1-6
#运行代码
%run my_first_chart.py
2.将会话转换为HTML文件:
在jupyter notebook中,选择File—Download as—.html 就可以保存为HTML文件。
3.将图表直接保存为图片:
plt.savefig('my_chart.png')
执行上述代码,工作目录会生成一个新文件my_chart.png,该图像文件的内容即是图表。