在之前的学习中,我们已经学过了许多对表格的操作,包括去重,取值,分类,多层索引等。这些操作都会让我们的数据更“干净”,但俗话说:“文不如表,表不如图”,干净的数据如果能做成图表,就可以让数据更加直观的呈现,更具说服力。所以,这次我们就来学习如何让数据以图像的形式呈现出来。
Matplot简介
Matplotlib是一个Python 2D绘图库,它可以在各种平台上以各种硬拷贝格式和交互式环境生成出具有出版品质的图形。它是Python中最常用的可视化工具之一,功能非常强大,可以轻松地绘制折线图,条形图,柱状图,散点图饼图等。
想要用好Matplot,首先需要我们需要根据数据的特点选对要绘制图的种类,其次,要了解Matplot图像组成。
一张Matplotlib图像可以分成三层结构:
1.第一层是底层的容器层,主要包括Canvas、Figure、Axes;
2. 第二层是辅助显示层,主要包括axis、spines、grid、legend、title等;
3. 第三层为图像层,即通过plot、scatter等方法绘制的图像。
容器层主要由Canvas、Figure、Axes组成。Canvas是位于最底层的系统层,在绘图的过程中充当画板的角色,即放置画布(Figure)的工具,用我们一般不会用到;Figure是Canvas上方的第一层,也是需要用户来操作的应用层的第一层,在绘图的过程中充当画布的角色,我们可以设置画布的大小和分辨率等;Axes是应用层的第二层,在绘图的过程中相当于画布上的绘图区的角色。一个Figure对象可以包含多个Axes对象,并且每个Axes都是一个独立的坐标系,绘图过程中的所有图像都是基于坐标系绘制的。
辅助显示层为Axes(绘图区)内的除了根据数据绘制出的图像以外的内容,主要包括Axes外观(facecolor)、边框线(spines)、坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、网格线(grid)、图例(legend)、标题(title)等内容,可以设置可使图像显示更加直观更加容易被用户理解,但又不会对图像产生实质的影响。
图像层指Axes内通过plot、scatter、bar、histogram、pie等函数根据数据绘制出的图像。
一张完整的图可以长成这样:
总结得出
Canvas(画板)位于最底层,用户一般接触不到;
Figure(画布)建立在Canvas之上;
Axes(绘图区)建立在Figure之上;
坐标轴(axis)、图例(legend)等辅助显示层以及图像层都是建立在Axes之上。
折线图初体验
上面我们已经了解了Matplotlib的结构,可能大家有些不太理解。不过没关系,接下来我们会在实战中慢慢学会用法。下面我们就来一起体验一下绘制折线图的过程。
和其他库一样,使用Matplot之前,需要导入模块:
from matplotlib import pyplot as plt
绘图之前,我们需要准备两个维数相同的行向量,一个作为横坐标(自变量),一个作为纵坐标(因变量);接下来就可以使用plot进行折线图的绘制:
#在使用jupyter notebook时调用matplotlib.pyplot的绘图函数plot()进行绘图的时候,或者生成一个figure画布的时候,需要加上%matplotlib
# %matplotlib inline
from matplotlib import pyplot as plt
x = range(1,8)
y = [17, 17, 18, 15, 11, 11, 13]
plt.plot(x,y) # 绘制折线图
plt.show() # 展示折线图
我们看一看绘制的结果:
从图片上可以看出,X轴和Y轴的刻度都是默认生成的,这个是可以自己定义的,后面会具体讲解。还有一个问题就是折线的颜色、折点以及宽度该怎么设置呢?
from matplotlib import pyplot as plt
x = range(1,8)
y = [17, 17, 18, 15, 11, 11, 13]
plt.plot(x, y, color='green',alpha=0.5,linestyle=':',linewidth=3,marker='o')
plt.show()
color可以设置折线的颜色,alpha可以设置线的透明度,linewidth可以设置线的宽度。
inestyle和marker分别可以设置连线的形式和端点的形状,具体值如下:
符号 | 连线样式 |
---|---|
‘-’ | 直线样式(默认) |
‘–’ | 虚线样式 |
‘-.’ | 点划线样式 |
‘:’ | 点虚线样式 |
符号 | 端点样式 | 符号 | 端点样式 |
---|---|---|---|
‘.’ | 点标记 | ‘s’ | 正方形标记 |
‘,’ | 像素标记 | ‘p’ | 五边形标记 |
‘o’ | 圆标记 | ‘*’ | 星标 |
‘v’ | 三角向下标记 | ‘h’ | 六边形1标记 |
‘^’ | 三角向上标记 | ‘H’ | 六边形2标记 |
‘<’ | 三角向左标记 | ‘+’ | 加号标记 |
‘>’ | 三角向右标记 | ‘x’ | x标记 |
‘1’ | 三角星向下标记 | ‘D’ | 钻石标记 |
‘2’ | 三角星向上标记 | ‘d’ | 薄钻石标记 |
‘3’ | 三角星向左标记 | ‘I’ | v线标记 |
‘4’ | 三角星向右标记 | ‘_’ | h线标记 |
标题设置
我们应能够画出一幅折线图了,但是这幅折线图没有x,y轴的标题,并且图片也没有标题,现实中,这些标题可以告诉我们图片的具体意义,我们可以通过以下代码对图片添加标题:
from matplotlib import pyplot as plt
x = range(1,8)
y = [17, 17, 18, 15, 11, 11, 13]
plt.plot(x, y, color='green',alpha=0.5,linestyle='--',linewidth=2,marker='2')
plt.xlabel('Time')
plt.ylabel("Temp")
plt.title('Title')
plt.show()
本文主要介绍了Matplot库以及如何使用plot绘制简单的折线图。本节内容不多,希望大家可以好好掌握~