Python数据分析实战—用matplotlib实现数据可视化(1)

《Python数据分析实战》

matplotlib优点:

  • 使用起来极其简单
  • 以渐进、交互式方式实现数据可视化
  • 表达式和文本使用LaTeX排版
  • 对图像元素控制力更强
  • 可输出PNG、PDF、SVG和EPS等多种格式

1.matplotlib架构

matplotlib的主要任务之一,就是提供一套表示和操作图形对象(主要对象)以及它的内部对象的函数和工具。
然而,matplotlib不仅可以处理图形,还提供事件处理工具,具有为图形添加动画效果的能力。有了这些附加功能,matplotlib就能够生成以键盘按键或鼠标移动的事件的交互式图表。

从逻辑上来讲,matplotlib的整体架构由位于三个不同层级的三层组成。各层之间单向通信,即每一层只能与它的下一层通信,而下层无法与上层通信。
matplotlib的架构分为以下三层:

  • Scripting(脚本)层
  • Artist(表现)层
  • Backend(后端)层

Backend(后端)层:

最下面一层为Backend层。matplotlib API即位于该层,这些API是用来再底层实现图形元素的一个个类。

  • FigureCanvas对象实现了绘图区域这一概念。
  • Renderer对象再FigureCanvas上绘图。
  • Event对象处理用户输入(键盘和鼠标事件)

Artists(表现)层:

中间层为Artist层。图形中所有能看到的元素都属于Artist对象,即标题、轴标签、刻度等组成图形的所有元素都是Artist对象的实例。图形中的每个元素的实例再层级结构中有着自己的位置。

Python数据分析实战—用matplotlib实现数据可视化(1)_第1张图片

图表的各元素分别对应一个Artist实例,所有实例形成层级结构。

Artist类分为两种:原始(primitive)和复合(composite)。

绘制Line2D或矩形、圆形等几何图形,甚至文本等图形时,形成图形表示的基础元素由primitive artist单个对象组成。
由多个基础元素—primitive artist—组成的图表中的图像元素叫作composite artist,例如Axis(单条轴)、Ticks(刻度)、Axes(轴)和Figure(图形)。

Python数据分析实战—用matplotlib实现数据可视化(1)_第2张图片

一般而言,在中国阶段(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()

Python数据分析实战—用matplotlib实现数据可视化(1)_第3张图片

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(39.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,该图像文件的内容即是图表。

你可能感兴趣的:(Python数据科学)