资讯专栏INFORMATION COLUMN

【数据科学系统学习】Python # 数据分析基本操作[三] matplotlib

BDEEFE / 736人阅读

摘要:有一些表示常见图形的对象称为块,完整的集合位于。中的绘图函数在中,有行标签列标签分组信息。密度图通过计算可能会产生观测数据的连续概率分布的估计而产生的。在探索式数据分析工作中,同时观察一组变量的散布图是很有意义的。

我们在上一篇介绍了 pandas,本篇介绍 matplotlib。


绘图和可视化

一个用于创建出版质量图表的桌面绘图包。

Matplotlib API入门

Figure 和 Subplot


matplotlib的图像都位于Figure对象中。

带有三个subplotFigure

这些由fig.add_subplot所返回的对象是AxesSubplot对象,直接调用它们的实例方法就可以在其它空着的格子里画图了。

这时发出一条绘图命令,matplotlib就会在最后一个用过的subplot上进行绘制(如果没有会创建一个):

K--:一个线型选项,用于告诉matplotlib绘制黑色虚线图。


依次画出虚线、直方图、散点图。

根据特定布局创建Figuresubplot的简便方法:plt.subplots, 它可以创建一个新的Figure,并返回一个含有已创建的subplot对象的NumPy数组:

可以对 axes数组进行索引,就像是一个二维数组一样:

还可以通过sharexsharey指定subplot应该具有相同的X轴或Y轴(刻度),在比较相同范围的数据时用,否则matplotlib会自动缩放各图表的界限。


调整subplot周围的间距


默认情况下,matplotlib会在subplot外围留下一定的边距,在subplot之间留下一定的间距。间距跟图像的高度和宽度有关。

利用Figuresubplots_adjust方法修改间距。

下面的例子间距收缩到 0:

轴标签重叠了,matplotlib不会检查标签是否重叠,这时要自己设定刻度位置和刻度标签。

可以在matplotlib的文档中找到各种图表类型。


颜色、标记和线型


完整的linestyle列表参见plot的文档。

ax.plot(x, y, "g--")  #根据x, y绘制绿色虚线
ax.plot(x, y, linestyle="--", color="g")   #更明确的方式,和上面一样的效果

要使用其他任意颜色可以通过指定其 RGB 值的形式(如 #CECECE)

matplotlib创建的是连续的线型图,即点与点之间插值,非实际数据点默认是按线性方式插值的,可以通过drawstyle选项修改:


线型图可以加上一些标记,以强调实际的数据点:

标记类型和线型必须放在颜色后面。

简化的写法:


刻度、标签和图例


过程型的pyplot接口

交互式使用,有xlim, xticks, xticklabels之类的方法,它们分别控制图表的范围,刻度位置,刻度标签等。
调用时不带参数,如plt.xlim()返回当前的X轴绘图范围。
调用时带参数,如plt.xlim([0, 10])会将X轴的范围设置为 0 到 10。

更为面向对象的原生matplotlib API


设置标题、轴标签、刻度以及刻度标签


绘制一段随机漫步:

修改X轴刻度:set_xticks(数值),set_xticklabels(其他任何的值用作刻度)。


添加图例(legend)


添加图例的方式:添加subplot的时候传入label参数。

调用 ax.legend()plt.legend() 来自动创建图例。

loc告诉matplotlib要将图例放在哪,best选择最不碍事的位置。

去除图例:不传入label或传入label="_nolegend_"(注意有两个下划线)。


注释以及在Subplot上绘图


注释:通过 text, arrow, annotate 等函数进行添加。


matplotlib有一些表示常见图形的对象:称为块(patch),完整的集合位于matplotlib.patches

创建一个块对象shp,然后通过ax.add_patch(shp)将其添加到subplot中:

图表对象:它们其实就是由块组装而成的。


将图表保存到文件


利用 plt.savefig 可以将当前图表保存到文件。(该方法相当于 Figure 对象的实例方法 savefig)。

如要将图表保存为 SVG 文件:

两个重要的选项:

dpi:控制“每英寸点数”分辨率;

bbox_inches:可以剪除当前图表周围的空白部分。

得到一张带有最小白边且分辨率为 400DPI 的 PNG 图片:

savefig并非一定要写入磁盘,也可写入任何文件型的对象,比如StringIO


matplotlib配置


操作matplotlib配置系统的方式:Python 编程方式,即利用rc方法。

如将全局的图像默认大小设置为 10 * 10,执行:

plt.rc("figure", figsize=(10, 10))

rc的第一个参数:是希望自定义的对象(如"figure", "axes", "xtick", "ytick", "grid", "legend"),这里是figure

可以跟一系列的关键字参数,将它们写成一个字典:

全部的自定义选项:查阅matplotlib的配置文件matplotlibrc(位于 matplotlib/mpl-data 目录中)。对该文件进行自定义,并将其放在目录中,则每次使用matplotlib时就会加载该文件。


pandas中的绘图函数

pandas中,有行标签、列标签、分组信息。

要制作一张完整的图表,原本需要一大堆的matplotlib代码,现在只需一两条简洁的语句就可以了。pandas有许多能够利用DataFrame对象数据组织特点来创建标准图表的高级绘图方法。


线型图


SeriesDataFrame都有一个用于生成各类图表的plot方法,默认情况下它们都生成线型图。

DataFrameplot方法会在一个 subplot 中为各列绘制一条线,并自动创建图例。


柱状图


垂直柱状图:Kind="bar"
水平柱状图:Kind="barh"


设置 stacked=True 即可为DataFrame生成堆积柱状图:


柱状图利用value_counts图形化显示Series中各值的出现频率,如:


直方图和密度图


直方图(histogram):是一种可以对值频率进行离散化显示的柱状图。

密度图:通过计算“可能会产生观测数据的连续概率分布的估计”而产生的。

一般的过程是将该分布近似为一组核(如正态(高斯)分布之类的较为简单的分布)。

密度图也被称作 KDE 图(Kernel Density Estimate 核密度估计)。

直方图和密度图常被画在一起,直方图以规格化形式给出(以便给出面元密度),再在其上绘制核密度估计。


由两个不同的标准正态分布组成的双峰分布:

最后一行代码绘制的密度图的最终结果:


散布图


散布图(scatter plot):是观察两个一维数据序列之间关系的有效手段。

matplotlibscatter方法是绘制散布图的主要方法。

在探索式数据分析工作中,同时观察一组变量的散布图是很有意义的。也被称为散布图矩阵(scatter plot matrix)。

pandas提供了一个能从DataFrame创建散布图矩阵的 scatter_matrix 函数,它还支持在对角线上放置各变量的直方图或密度图。


不足之处,欢迎指正。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44742.html

相关文章

  • 数据学系学习】机器学习算法 # 西瓜书学习记录 [3] Logistic 回归实践

    摘要:根据错误率决定是否回退到训练阶段,通过改变迭代的次数和步长等参数来得到更好的回归系数。使用回归方法进行分类所需做的是把测试集上每个特征向量乘以最优化方法得来的回归系数,再将该乘积结果求和,最后输入到函数即可。 本篇内容为《机器学习实战》第 5 章 Logistic 回归程序清单。 书中所用代码为 python2,下面给出的程序清单是在 python3 中实践改过的代码,希望对你有帮助。...

    MSchumi 评论0 收藏0
  • 数据学系学习Python # 编程基础[]

    摘要:新的称为子类,而被继承的称为基类父类或超类。继承最大的好处是子类获得了父类的全部功能。在继承关系中,如果一个实例的数据类型是某个子类,那它的数据类型也可以被看做是父类。 在上一篇中我们介绍了模块和数据结构,这一篇将介绍面向对象编程。 面向对象编程 面向对象编程——Object Oriented Programming,简称 OOP,是一种程序设计思想。OOP 把对象作为程序的基本单元...

    molyzzx 评论0 收藏0
  • 15个Python库,让你学习数据科学更轻松

    摘要:在本节中,我们将看到一些最流行和最常用的库,用于机器学习和深度学习是用于数据挖掘,分析和机器学习的最流行的库。愿码提示网址是一个基于的框架,用于使用多个或进行有效的机器学习和深度学习。 showImg(https://segmentfault.com/img/remote/1460000018961827?w=999&h=562); 来源 | 愿码(ChainDesk.CN)内容编辑...

    W4n9Hu1 评论0 收藏0

发表评论

0条评论

BDEEFE

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<