Python数据处理 | (三) Matplotlib数据可视化

本篇博客所有示例使用Jupyter NoteBook演示。

Python数据处理系列笔记基于:Python数据科学手册电子版  下载密码:ovnh

示例代码  下载密码:02f4

 

目录

一、Matplotlib常用技巧

1.导入Matplotlib

2.设置绘图样式

3.用不用show()?如何显示图形

4.将图形保存为文件

二、两种画图接口

1.MATLAB风格接口

2.面向对象接口

三、简易折线图

1.调整图形:线条的颜色与风格

2.调整图形:坐标轴上下限

3.设置图形标签

四、简易散点图

1.用plt.plot画散点图

2.用plt.scatter画散点图

3.plot与scatter:效率对比

五、可视化异常处理

1.基本误差线

2.连续误差

六、密度图和等高线图

1.三维函数的可视化

七、频次直方图、数据区间划分和分布密度

1.二维频次直方图与数据区间划分

八、配置图例

1.选择图例显示的元素

2.在图例中显示不同尺寸的点

3.同时显示多个图例

九、配置颜色条

1.配置颜色条

2.案例:手写数字

十、多子图

1.plt.axes:手动创建子图

2.plt.subplot:简易网格子图

3.plt.subplots:一行代码创建网格

4.plt.GridSpec:实现更复杂的排列方式

十一、文字与注释

1.案例:节假日对美国出生率的影响

2.坐标变换与文字位置

3.箭头与注释

十二、自定义坐标轴刻度

1.主要刻度与次要刻度

2.隐藏刻度与标签

3.增减刻度数量

4.花哨的刻度格式

5.格式生成器与定位器小结

十三、Matplotlib自定义:配置文件与样式表

1.手动配置图形

2.修改默认配置:rcParams

3.样式表

十四、用Matplotlib画三维图

1.三维数据点与线

2.三维等高线图

3.线框图和曲面图

4.曲面三角剖分

十五、用Basemap可视化地理数据

1.地图投影

2.画一个地图背景

3.在地图上画数据

4.案例:美国加州城市数据

5.案例:地表温度数据

十六、用Seaborn做数据可视化

1.Seaborn与Matplotlib

2.Seaborn图形介绍

3.案例:探索马拉松比赛成绩数据


一、Matplotlib常用技巧

1.导入Matplotlib

2.设置绘图样式

3.用不用show()?如何显示图形

  • 在脚本中画图

如果在脚本文件或集成环境中使用Matplotlib,显示图形必须使用plt.show():

Python数据处理 | (三) Matplotlib数据可视化_第1张图片

注意一个Python会话只能使用一次plt.show(),通常放在脚本最后;多个plt.show()会导致异常。

  • 在Ipython shell中画图

在Ipython shell中启动Matplotlib模式后,就不需要使用plt.show().

此后任何plt命令都会自动打开一个图形窗口,增加新命令,图形就会更新。

有一些变化,如改变已经画好的线条属性不会自动及时更新,可以使用plt.draw()强制更新。

Python数据处理 | (三) Matplotlib数据可视化_第2张图片

  • 在Ipython Notebook中画图

将图形直接嵌在IPython Notebook页面中,有两种形式上:

1)%matplotlib notebook会在Notebook中启动交互式图形

2)%matplotlib inline会在Notebook中启动静态图形

统一使用2):

Python数据处理 | (三) Matplotlib数据可视化_第3张图片

4.将图形保存为文件

可以用savefig()把图形保存为不同的数据格式:

Python数据处理 | (三) Matplotlib数据可视化_第4张图片

查看系统支持的文件格式:

Python数据处理 | (三) Matplotlib数据可视化_第5张图片

保存图像文件不需要使用plt.show()等命令。

二、两种画图接口

1.MATLAB风格接口

Python数据处理 | (三) Matplotlib数据可视化_第6张图片

这种接口是有状态的:会持续跟踪当前的图形和坐标轴,所有plt命令都可以用:

Python数据处理 | (三) Matplotlib数据可视化_第7张图片

这种接口当创建第二个子图时,如果再回到第一个子图增加内容,会很复杂。

2.面向对象接口

Python数据处理 | (三) Matplotlib数据可视化_第8张图片

画简单图形时,二者看个人喜好;画比较复杂的图形时,面向对象方法会更方便。

三、简易折线图

在Notebook中画图,需要先导入:

Python数据处理 | (三) Matplotlib数据可视化_第9张图片

首先需要创建一个图形fig和一个坐标轴ax:

Python数据处理 | (三) Matplotlib数据可视化_第10张图片

然后用ax.plot画图(面向对象接口):

Python数据处理 | (三) Matplotlib数据可视化_第11张图片

plt.plot() Matplotlib接口:

Python数据处理 | (三) Matplotlib数据可视化_第12张图片

在一幅图中画多条曲线,可以重复调用plot:

Python数据处理 | (三) Matplotlib数据可视化_第13张图片

1.调整图形:线条的颜色与风格

设置曲线颜色,用color参数,有多种表示方法:

Python数据处理 | (三) Matplotlib数据可视化_第14张图片

如果不知道颜色,会为多条曲线默认使用一组颜色。

可以用linestyle参数调整线条风格:

Python数据处理 | (三) Matplotlib数据可视化_第15张图片

Python数据处理 | (三) Matplotlib数据可视化_第16张图片

组合color和linestyle参数:

Python数据处理 | (三) Matplotlib数据可视化_第17张图片

2.调整图形:坐标轴上下限

Python数据处理 | (三) Matplotlib数据可视化_第18张图片

Python数据处理 | (三) Matplotlib数据可视化_第19张图片

也可以使用plt.axis()设置范围:

Python数据处理 | (三) Matplotlib数据可视化_第20张图片

plt.axis()还可以设置布局:

Python数据处理 | (三) Matplotlib数据可视化_第21张图片

Python数据处理 | (三) Matplotlib数据可视化_第22张图片

3.设置图形标签

设置图形标题和坐标标题:

Python数据处理 | (三) Matplotlib数据可视化_第23张图片

单图显示多条曲线时,设置图例:

Python数据处理 | (三) Matplotlib数据可视化_第24张图片

绝大多数Matlab接口和面向对象接口是通用的,如plt.plot()和ax.plot(),plt.legend()和ax.legend()等,也有一些稍有不同,二者转换如下:

Python数据处理 | (三) Matplotlib数据可视化_第25张图片

使用面向对象接口时,一般不单独调用这些函数,而是用ax.set()统一设置:

Python数据处理 | (三) Matplotlib数据可视化_第26张图片

四、简易散点图

1.用plt.plot画散点图

Python数据处理 | (三) Matplotlib数据可视化_第27张图片

演示一些不同的图形标记:

Python数据处理 | (三) Matplotlib数据可视化_第28张图片

图形标记可以与线条和颜色结合使用:

Python数据处理 | (三) Matplotlib数据可视化_第29张图片

设置散点和线条的属性:

Python数据处理 | (三) Matplotlib数据可视化_第30张图片

2.用plt.scatter画散点图

与plt.plot()相比,plt.scatter()创建散点图更灵活:

Python数据处理 | (三) Matplotlib数据可视化_第31张图片

引入鸢尾花数据集,feature[0]是花萼长度,feature[1]是花萼宽度,图中点的大小代表feature[3]花瓣的宽度,三种颜色对应三种类型的鸢尾花:

Python数据处理 | (三) Matplotlib数据可视化_第32张图片

3.plot与scatter:效率对比

对于小型数据集,二者差异不大;对于大型数据集,plot比scatter快很多。

原因在于plot中散点基本彼此复制,整个数据集中所有点的颜色、尺寸只需要配置一次;scatter会对每个散点进行单独的大小与颜色的渲染。

五、可视化异常处理

1.基本误差线

Python数据处理 | (三) Matplotlib数据可视化_第33张图片

改善选项,一般误差线颜色比数据点颜色浅一点比较好:

Python数据处理 | (三) Matplotlib数据可视化_第34张图片

可以设置水平误差线、单侧误差线等。可以参考程序文档plt.errorbar.

2.连续误差

有时需要显示连续变量的误差:

通过高斯过程回归方法,演示对带有不确定性的连续测量值进行拟合:

Python数据处理 | (三) Matplotlib数据可视化_第35张图片

fill_between首先传入x轴坐标值,然后传入y轴下边界,以及上边界,接下来是一些线条属性设置。,整个区域被误差线填充。

拟合效果:在接近样本点的区域,模型受很强的约束,拟合误差很小,接近真实值;远离样本点的区域,模型不受约束,误差不断增大。

六、密度图和等高线图

1.三维函数的可视化

等高线图可视化三维数据:

Python数据处理 | (三) Matplotlib数据可视化_第36张图片

Python数据处理 | (三) Matplotlib数据可视化_第37张图片

查看所有配色方案:

Python数据处理 | (三) Matplotlib数据可视化_第38张图片

可以用plt.contourf()来填充等高线,语法和plt.contour()一致:

Python数据处理 | (三) Matplotlib数据可视化_第39张图片

通过plt.imshow(),将2维数组渲染成渐变图:

Python数据处理 | (三) Matplotlib数据可视化_第40张图片

imshow()注意事项:

1)plt.imshow()不支持x轴和y轴数据设置网格,必须通过extent参数设置图形的坐标范围[xmin,xmax,ymin,ymax

2)  plt.imshow()原点在左上角,而不是绝大多数等高线图使用的左下角。在显示网格数据图形时必须调整

3)plt.imshow()会自动调整坐标轴的精度以适应数据显示。可以通过plt.axis(aspect='image')设置x和y轴的单位

将等高线图与彩色图结合:如将一幅背景为半透明的彩色图(alpha设置透明度),与另一幅坐标相同、带数据标签的等高线图叠放在一起(plt.clabel()):

Python数据处理 | (三) Matplotlib数据可视化_第41张图片

七、频次直方图、数据区间划分和分布密度

一个简易的频次直方图:

Python数据处理 | (三) Matplotlib数据可视化_第42张图片

个性化的频次直方图:

Python数据处理 | (三) Matplotlib数据可视化_第43张图片

同坐标轴多个频次直方图:

Python数据处理 | (三) Matplotlib数据可视化_第44张图片

简单计算每个区间内的样本数,不想画图:

Python数据处理 | (三) Matplotlib数据可视化_第45张图片

1.二维频次直方图与数据区间划分

就像把一维数组分为区间创建一维频次直方图一样,可以将2维数组按照2维区间划分,创建2维频次直方图:

  • plt.hist2d:2维频次直方图

Python数据处理 | (三) Matplotlib数据可视化_第46张图片

与hist一样hist2d也有很多其他配置选项。

如果不想画图,只想查看计算结果:

Python数据处理 | (三) Matplotlib数据可视化_第47张图片

  • plt.hexbin:六边形区间划分

2维频次直方图是与坐标轴正交的方块分割而成的,比较常用的是用正六边形分割:

Python数据处理 | (三) Matplotlib数据可视化_第48张图片

  • 核密度估计

用于评估多维数据分布密度的常用方法,KDE。

演示用KDE抹去空间中离散的数据点,拟合出一个平滑的函数:

Python数据处理 | (三) Matplotlib数据可视化_第49张图片

 

八、配置图例

可以使用plt.legend()/ax.legend()来创建最简单的图例,它会自动创建一个包含每个图形元素的图例:

Python数据处理 | (三) Matplotlib数据可视化_第50张图片

个性化图例设置:

Python数据处理 | (三) Matplotlib数据可视化_第51张图片

Python数据处理 | (三) Matplotlib数据可视化_第52张图片

Python数据处理 | (三) Matplotlib数据可视化_第53张图片

1.选择图例显示的元素

图例会默认显示所有元素的标签,也可以不显示全部:

Python数据处理 | (三) Matplotlib数据可视化_第54张图片

也可以为要显示的图例设置标签:

Python数据处理 | (三) Matplotlib数据可视化_第55张图片

2.在图例中显示不同尺寸的点

有时可能需要用不同尺寸的点表示数据特征,希望创建这样的图例来反应这些特征。

下面有点的尺寸来表示美国加州不同城市的面积,颜色代表不同城市的人口数,通过一个不同尺寸的点来显示不同面积的图例:

 加州城市数据集       下载密码:94pq

Python数据处理 | (三) Matplotlib数据可视化_第56张图片

Python数据处理 | (三) Matplotlib数据可视化_第57张图片

3.同时显示多个图例

如果要在一张图上显示多个图例不太容易,legend()只能为一张图设置第一个图例,再设置图例第一个会被覆盖。

可以通过如下方法实现:

Python数据处理 | (三) Matplotlib数据可视化_第58张图片

九、配置颜色条

创建最简单的颜色条:

Python数据处理 | (三) Matplotlib数据可视化_第59张图片

1.配置颜色条

通过cmap参数设置颜色条配色方案:

Python数据处理 | (三) Matplotlib数据可视化_第60张图片

查看所有配色方案:

Python数据处理 | (三) Matplotlib数据可视化_第61张图片

  • 选择配色方案

一般情况下只需重点关注三种不同的配色方案:

1)顺序配色方案:由一组连续的颜色构成的配色方案(binary或viridis)

2)互逆配色方案:由两种互补的颜色构成,表示正反两种含义(RdBu或PuOr)

3)定性配色方案:随机顺序的一组颜色(rainbow或jet)

可以通过把配色方案转换成黑白的灰度图看看具体的颜色:

Python数据处理 | (三) Matplotlib数据可视化_第62张图片

Python数据处理 | (三) Matplotlib数据可视化_第63张图片

上图中灰度图中比较亮的条纹。这些亮度变化不均匀的条纹在彩色图中对应一段区间,由于色彩太接近容易凸显出数据集中不重要的部分,jet不是一种好的配色方案,更好的是viridis。

Python数据处理 | (三) Matplotlib数据可视化_第64张图片

彩虹效果,可以用cubehelix配色方案可视化连续的数值:

Python数据处理 | (三) Matplotlib数据可视化_第65张图片

要用两种颜色表示正反两种含义时,可使用RdBu双色配色方案:

Python数据处理 | (三) Matplotlib数据可视化_第66张图片

  • 颜色条刻度的限制与扩展功能的设置

颜色条本身可以看作一个plt.Axes的实例,之前学习的关于坐标轴和刻度纸的格式配置都可以用。

我们还可以缩短颜色取值的上下限,对于超出上下限的数据,通过extend用三角箭头表示比上限大的数或比下限小的数。

Python数据处理 | (三) Matplotlib数据可视化_第67张图片

左图用默认的颜色条刻度限制实现的效果,噪点的范围完全覆盖了我们感兴趣的数据。

右图设置了颜色条刻度的上下限,并在上下限之外增加了扩展功能,这样数据可视化图形显然更有效果。

  • 离散型颜色条

颜色条默认是连续的,有时可能需要表示离散数据:

Python数据处理 | (三) Matplotlib数据可视化_第68张图片

2.案例:手写数字

下载手写数字数据集,对一些数字可视化:

Python数据处理 | (三) Matplotlib数据可视化_第69张图片

每个数字由64个像素构成,每个数字可以看作一个64维空间中的点,每个维度表示一个像素的亮度。

可视化高维空间非常困难,一种解决方法是降维,在尽量保留数据内部重要关联性的同时降低数据的维度,如流形学习:

使用流形学习将数字投影到2维空间并可视化:

Python数据处理 | (三) Matplotlib数据可视化_第70张图片

数字3和5投影面积有重叠,说明手写3,5难以区分,自动分类算法容易搞混;

其他数字如0和1,隔得比较远,说明2者不太可能出现混淆。

十、多子图

1.plt.axes:手动创建子图

plt.axes默认创建一个标准坐标轴,图形坐标系统由四个值组成[底坐标,左坐标,宽度,高度],取值范围为左下角为原点(0),右上角为1.

Python数据处理 | (三) Matplotlib数据可视化_第71张图片

创建两个竖直排列的坐标轴:

Python数据处理 | (三) Matplotlib数据可视化_第72张图片

上子图起点坐标y为0.5位置,与下子图对应,起点y坐标为0.1位置,高度为0.4

2.plt.subplot:简易网格子图

创建彼此对齐的行列子图:

Python数据处理 | (三) Matplotlib数据可视化_第73张图片

面向对象接口可实现同样的效果:

Python数据处理 | (三) Matplotlib数据可视化_第74张图片

3.plt.subplots:一行代码创建网格

Python数据处理 | (三) Matplotlib数据可视化_第75张图片

4.plt.GridSpec:实现更复杂的排列方式

实现不规则的多行多列子图网格:

Python数据处理 | (三) Matplotlib数据可视化_第76张图片

创建多轴频次直方图(后续的Seaborn中会有专门的接口):

Python数据处理 | (三) Matplotlib数据可视化_第77张图片

Python数据处理 | (三) Matplotlib数据可视化_第78张图片

十一、文字与注释

基本的注释可能只是坐标轴标题与图标题,但注释远远不止这些。

1.案例:节假日对美国出生率的影响

美国出生人口数据                下载密码:iwwn

Python数据处理 | (三) Matplotlib数据可视化_第79张图片

如果为图形添加一些注释,就更能吸引读者注意了。plt.text()/ax.plot()可以在图中某个坐标点上手动添加注释:

Python数据处理 | (三) Matplotlib数据可视化_第80张图片

2.坐标变换与文字位置

三种坐标变换方式:

1)ax.transData 以数据为基准的坐标变换,默认值,以x,y轴的标签作为数据坐标

2)ax.transAxes以坐标轴为基准的坐标变换,以下图中白色矩形左下角为原点,按坐标轴尺寸的比例显示坐标

3)fig.transFigure以图形为基准的坐标变换,以下图中灰色矩形左下角为原点,按图形尺寸的比例显示坐标

Python数据处理 | (三) Matplotlib数据可视化_第81张图片

Python数据处理 | (三) Matplotlib数据可视化_第82张图片

3.箭头与注释

Python数据处理 | (三) Matplotlib数据可视化_第83张图片

arrowprop字典设置箭头风格,更多选项可以查看官方文档。

用之前的人口数据演示一些箭头注释:

Python数据处理 | (三) Matplotlib数据可视化_第84张图片

Python数据处理 | (三) Matplotlib数据可视化_第85张图片

十二、自定义坐标轴刻度

Matplotlib目标是用Python对象表现任意图形元素,例如每个figure对象都会包含一个或多个axes对象,每个axes对象又会包含其他表示图形内容的对象。

对于坐标轴刻度线,每个axes都有xaxis和yaxis属性,每个属性同包含构成坐标轴的线条、刻度和标签的全部属性。

1.主要刻度与次要刻度

主要刻度更显著且有标签,次要刻度更小且没有标签。一般情况下Matplotlib不使用次要刻度,可以在对数图中看到:

Python数据处理 | (三) Matplotlib数据可视化_第86张图片

Python数据处理 | (三) Matplotlib数据可视化_第87张图片

可以设置每个坐标轴的formatter和locator对象,自定义刻度线位置和标签。

查看x轴属性:

Python数据处理 | (三) Matplotlib数据可视化_第88张图片

上图的主要刻度和次要刻度的位置都是由LogLocator对象设置。

上图的主要刻度的标签由LogFormatterMathtext对象设置;主要刻度的标签由NullFormatter对象设置,所以不显示。

2.隐藏刻度与标签

Python数据处理 | (三) Matplotlib数据可视化_第89张图片

上例中隐藏了x轴标签,但刻度/网格线会保留;隐藏了y轴刻度,此时y轴标签也一并隐藏。

很多时候显示图片时是不需要刻度的,如显示人脸图片:

Python数据处理 | (三) Matplotlib数据可视化_第90张图片

Python数据处理 | (三) Matplotlib数据可视化_第91张图片

3.增减刻度数量

默认刻度值,显示小图片时会十分拥挤:

Python数据处理 | (三) Matplotlib数据可视化_第92张图片

可以设置坐标轴上最大的刻度数量:

Python数据处理 | (三) Matplotlib数据可视化_第93张图片

4.花哨的刻度格式

默认刻度的正/余弦曲线:

Python数据处理 | (三) Matplotlib数据可视化_第94张图片

上图默认是整数刻度/网格线,如果是pi的倍数会更好:

Python数据处理 | (三) Matplotlib数据可视化_第95张图片

 

将小数形式的刻度标签转换为带pi的形式:

Python数据处理 | (三) Matplotlib数据可视化_第96张图片

Matplotlib支持Latex功能,数学表达式用一对$包括。 "$\pi$"代表派。

5.格式生成器与定位器小结

  • 定位器类

主要设置坐标轴主要/次要刻度以及位置、数量、分布等。

Python数据处理 | (三) Matplotlib数据可视化_第97张图片

  • 格式生成器类

主要设置坐标轴主要/次要刻度标签的形式。

Python数据处理 | (三) Matplotlib数据可视化_第98张图片

十三、Matplotlib自定义:配置文件与样式表

1.手动配置图形

2.修改默认配置:rcParams

3.样式表

十四、用Matplotlib画三维图

1.三维数据点与线

2.三维等高线图

3.线框图和曲面图

4.曲面三角剖分

十五、用Basemap可视化地理数据

1.地图投影

2.画一个地图背景

3.在地图上画数据

4.案例:美国加州城市数据

5.案例:地表温度数据

十六、用Seaborn做数据可视化

1.Seaborn与Matplotlib

2.Seaborn图形介绍

3.案例:探索马拉松比赛成绩数据

你可能感兴趣的:(Python数据分析,Matplotlib,Seaborn,数据可视化,Python)