04.

Matplotlib初体验

大家好,我是小C,上期给大家分享——Python数据可视化—如何做好启动准备(小白必读)

本期分享内容:Python数据可视化—Matplotlib初体验

本期小C邀请的是齐伟(Python大学教材及畅销书作者)为我们分享Python数据可视化。

PYTHON

Matplotlib初体验

初次看到这个名字,是不是会想到另外一个著名的数学工具:Matlab(没想到也不要紧,毕竟 Matlab 是一个在数学及相关领域使用的专门工具)。

之所以要提及 Matlab,是因为它在与数学有关的应用方面颇有些神通,历史也很悠久。

但是,随着应用的要求越来越多,这个有点“古老”的工具,显得力不从心了,于是乎在数据分析、机器学习领域 Python 就异军突起。

随着 Python 的广泛应用,还要有很多的工具分别实现不同的应用。那么,在数据可视化层面,最早出现的就是 Matplotlib,因此,标题称其为“开山鼻祖”,丝毫不为过。

Matplotlib 的发明者是 John D. Hunter(一定要向大神献上敬意、崇拜和感谢).

2003 年发布了 Matplotlib 的 0.1 版,一路发展而来,版本不断更迭、功能不断丰富。截止到写这段内容为止,官方网站(http://matplotlib.org/)上发布的最新版本是 3.02。

Matplotlib 的使用方法有点类似于 Matlab。同时,它提供了“面向对象的 API”,让经过严格程序开发训练的人用起来也相当顺手。并且,它继承了 Python 的优良传统和一贯作风,即免费、开源和跨平台。

随着技术的进步和时代的变迁,现在能够实现数据可视化的工具越来越多,它们都意欲向 Matplotlib 发起挑战。尽管如此,Matplotlib 的江湖地位依然稳固,并且有很多新生代工具也是依靠它而建立的,比如 Seaborn。因此,学习 Matplotlib,合算且有必要,更何况,Matplotlib 也在与时俱进。

1.1 按部就班初体验

好东西,就要有好体验。

先执行 Jupyter,新建一个页面,然后输入如下代码块:

%matplotlib inline

注意,在输入这一行的时候,“%”与后面的“matplotlib”之间不要有空格。

完成这一行输入之后,通过组合键 Shift + Return(Shift + Enter)执行此代码块——以后提到执行代码或程序,都是如此操作。

执行之后,若没有什么反应,这说明完全正确了。这行代码的作用是告诉 Jupyter,如果生成了图像,就嵌入到当前浏览器页面中;如果不写 inline,会在另外一个新的窗口显示所绘制的图像。

在 Matplotlib 中,真正用来绘图的,是其中一个名字为 pyplot 的子模块,它是一个类似 Matlab 的接口。因此,要用下面的方式引入。注意,引入这个模块之后,为了方便,通常重名为 plt。

import matplotlib.pyplot as plt

上述代码完成之后,不要执行,而是直接按下回车键,即可在当前代码输入框中继续向下输入。

还要引入在数据科学中常用的 NumPy。

import numpy as np

依然不执行代码块,接下来就要写一段程序,演示如何绘制一个函数的曲线。继续输入:

a = np.li
nspace(0, 10, 100)
b = np.exp(-a)
plt.plot(a, b)

这部分代码输入完毕,然后执行。如果一切顺利,会得到如下图一样的结果;如果报错,首先检查拼写问题哦。

以上代码,是在 Jupyter 中绘图的方式。如果不在这个环境中,而是想把代码写成一个可执行的 Python 文件,还需要增加一点东西。

#coding: utf-8
'''
filename: ./chapter111.py
'''import numpy as np
import matplotlib.pyplot as plta = np.linspace(0, 10, 100)
b = np.exp(-a)
plt.plot(a, b)plt.show()

上面的代码不是写到当前的 Jupyter 中,而是打开一个 IDE,然后把它写入其中,并保存为某名称的文件,比如这里将其命名为 chapter111.py。而后用如下命令执行:

$ python3 chapter111.py

执行此程序文件之后,注意观察,会出现一个新窗口,如下图所示。

这个图提供的功能也不少,可以试一试图示中下面一排功能按钮,体会它们的作用。

以上体验了两种开发环境中制图的方式,特别提醒的是,在 IDE 中写制图程序的时候,需要增加 plt.show(),告诉程序把最终的图示展现出来。通常一个程序就一条这个语句,不论在这个程序中有多少个图。

根据数据科学工作者的习惯,我们还是使用 Jupyter,下文都如此。

在上面的代码中,核心就是 plt.plot 函数,可以通过下面的方式查看这个函数的完整内容。

在 Jupyter 中输入:

plt.plot?

执行之后,可以看到关于此函数的完整内容。下面是摘录的一部分:Signature: plt.plot(*args, scalex=True, scaley=True, data=None, **kwargs)Docstring:Plot y versus x as lines and/or markers.

Call signatures::

plot([x], y, [fmt], data=None, **kwargs)
plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)

The coordinates of the points or line nodes are given by x, y.

plt.plot 主要用于绘制曲线和点,需要提供 x 和 y 两个坐标轴的参数。至于这个函数的详细应用,后面会讲述。在这里,请掌握一种重要的学习方法:查看帮助文档。操作方式就如同上面所示。

以上绘图过程,其基本思路是承接了 Matlab 的思想,不是在现代编程语言中所倡导的“面向对象”的思想——但并不意味着这种方式不能使用。

那么,如果依据“面向对象”的思想,怎么使用 Matplotlib 作图呢?

先看来自 Matplotlib 官网上的一张图,这张图的内涵相当丰富。

这张图,可以看做是一张 Matplotlib 的藏宝图,在以后的课程中,我们会对其中的各对象逐一剖析,内化为自己的知识。

如果将这张图或绘制这张图的过程看作对象,那么图中各元素就是“属性”,其呈现的结果就是“属性的值”,而制作某个元素就是用对象的“方法”实现了。

比如把图中的坐标系看做一个对象,那么在这个坐标系中绘制一条曲线(例如上图中蓝色的那条曲线),就是执行这个坐标系的一种绘图方法。而所绘制的图线的颜色,则是此曲线的属性(属性值是“蓝色”)。

下面就依照“面向对象”的过程,绘制图像。

(1)创建 Figure 对象,它类似于一张画布,可以在这张画布上绘制其他对象。

fig = plt.figure()

首先创建一个 Figure 对象,它就相当于一张画布。

创建 Figure 实例对象的方法还可以是:plt.Figure()。

(2)创建坐标系

如果要绘制某种曲线,坐标系是不可或缺的。依据面向对象的思想,所创建的 fig 实例对象,应该具有一种创建坐标系的方法。

这个推论完全正确。

继续在上面的代码块中写如下语句:

ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])

add_axes 就是 fig 实例对象中用来创建坐标系的方法,即由此创建了一个 axes 对象,用变量 ax 引用。

如果想知道 fig 实例对象中都有哪些方法?可以如此操作。

在一个代码块中先输入 fig.(注意那个英文句点),然后按下键盘上的 TAB 键,就会看到下图的效果,这里面的都是 fig 实例的属相和方法。因此,不用有意识地去记忆,使用这种方式查找方法和属性名称。

再解释一下上面那一行代码。参数 [0.1, 0.1, 0.8, 0.8] 确定了这个坐标系的位置,其含义为 [left, bottom, width, height],左右尺寸都是相对于画布(即 fig 对象)的百分比。例如,第一个 0.1,表示坐标系的左侧相对画布左侧距离为画布宽度的 10%;第四个 0.8,表示坐标系的高度为画布高度的 80%。

目前,代码块中有了上述两行代码了,执行后,就可以看到一张已经有坐标系的图了。

(3)在坐标系内画曲线

利用 fig.add_axes() 创建了一个 Axes 对象,它跟 Figure 对象类似,都是“容器”,即 Axes 对象可以包含其他东西。

还是按照“面向对象”的思路,调用变量 ax 所引用的 axes 对象的方法(切换到 Jupyter)。

在前面的代码块里面,接着写入下面的语句:

a = np.linspace(0, 10, 100)
b = np.exp(-a)
ax.plot(a, b)

写好这段代码,就可以立刻执行了,看下效果,如下图所示。

如此,就完成了制图,得到了函数曲线。

以上两个作图过程,可以理解为两种风格:

· 第一种是继承了 Matlab 的做法,称为“Matlab 风格”,主要是通过 plt 操作各种绘图相关的函数;

· 第二种以“面向对象”的编程思想为基础,通过对象的方法和属性完成作图。

两者所使用的方法和属性也都是相同的或类似的,下表分别列出了常用的几项。

plt 函数

ax 对象方法

plt.plot

ax.plot

plt.legend

ax.legend

plt.xlabel

ax.set_xlabel

plt.ylabel

ax.set_ylabel

plt.xlim

ax.set_xlim

plt.ylim

ax.set_ylim

plt.title

ax.set_title

“面向对象”和“Matlab 风格”没有优劣之分,因此,后面会交叉使用,请不必厚此薄彼。

用 Matplotlib 除了能完成函数曲线图之外,还能做常规的统计图,比如直方图,它是统计学中常用的一种图形。

在新的代码块中输入如下代码:

from numpy.random import normal,rand
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
x = normal(size=200)
ax.hist(x, bins=30)

然后执行,会看到下图效果:

因为所用的是随机数,所以,看到的直方图可能互不相同。

ax.hist 就是坐标系对象绘制直方图的方法。

当然,可以绘制的图还有很多种,后面我们会逐渐接触到。

小结

本课是对 Matplot 的初步体验,特别介绍了两种制图方式。在初步接触中,几个函数(方法),并且重点强调要阅读帮助文档,这是一种重要学习方法。

今日内容有get吗,欢迎各位留言讨论!

下期预告:重新认识坐标系

以上专栏均来自CSDN GitChat专栏《案例上手Python数据可视化》,作者齐伟,专栏详情可识别下方二维码查看哦!

了解更多详情

可识别下方二维码

每日一课 | Python数据可视化—Matplotlib初体验相关推荐

  1. 每日一课 | Python数据可视化—认识坐标系

    05. 重新认识坐标系 大家好,我是小C,上期给大家分享--Python数据可视化-Matplotlib初体验 本期分享内容:Python数据可视化-Matplotlib初体验 本期小C邀请的是齐伟( ...

  2. 每日一课 | Python数据可视化—多样化的图像

    07 大家好,我是营长,昨天营长分享了数据科学"的知识点:,不清楚的小伙伴可戳这????每日一课|Python数据可视化-如何分区和绘图 本期营长接着为大家分享Python数据可视化相关内容 ...

  3. 每日一课 | Python数据可视化—如何分区和绘图

    06 大家好,我是营长,昨天营长分享了数据科学"的知识点:,不清楚的小伙伴可戳这????每日一课|Python数据可视化-重新认识坐标系 本期营长接着为大家分享Python数据可视化相关内容 ...

  4. 每日一课 | Python数据可视化—如何做好启动准备(小白必读)

    03 大家好,我是营长,昨天营长分享了数据科学"的基本概念,不清楚的小伙伴可戳这????每日一课|案列上手Python数据可视化 本期营长接着为大家分享Python数据可视化相关内容 这期分 ...

  5. Python数据可视化matplotlib(一)—— 图表的基本元素

    Python数据可视化matplotlib(一)-- 图表的基本元素 图表创建 plt.show() # 图表窗口1 → plt.show()plt.plot(np.random.rand(10)) ...

  6. Python数据可视化matplotlib:第四回:文字图例尽眉目

    Python数据可视化matplotlib:第四回:文字图例尽眉目 1. Figure和Axes上的文本 大家可以看到有些论文或者博客上都有绘制的很漂亮的图,其中大部分都在图形绘制上进行一定的注释说明 ...

  7. 第十九章 python 数据可视化 Matplotlib Pygal

    python 数据可视化 一.使用Matplotlib生成数据图 1. matplotlib画图中文乱码小方框的解决方法 2. 知识点 3. 安装Matplotlib包 4. Matplotlib数据 ...

  8. Python数据可视化--Matplotlib

    一.基本概念 Matplotlib 是一个 Python 的 2D 绘图库,是一个非常强大的 Python 画图工具.在机器学习和深度学习中,面对海量的数据集,我们时常需要通过绘图直观的呈现出这些数据 ...

  9. 免费直播课|Python数据可视化与科学计算可视化案例分享

    推荐图书: <Python可以这样学>,ISBN:9787302456469,董付国,清华大学出版社,第9次印刷 图书详情(京东): 董付国老师所有图书均提供配套教学资源. ======= ...

最新文章

  1. 过拟合的原因以及解决办法(深度学习)
  2. 17.splash_case02
  3. 配置本地及网络yum源(详细步骤)
  4. 前端工程师能力评估测试题(2020最新版附答案及解析)
  5. MVC Controller中View(model)如何在 View中的index页面获得?
  6. 建立密钥,远程登录LINUX----ssh-keygen
  7. 高德地图-AndroidStadio-No implementation found for long com.autonavi.amap.mapcore.MapCore.nativeNewInsta
  8. 项目汇报模板—再也不怕撕逼了
  9. Attachments in Oracle Form
  10. 下载并安装IDA Pro 7.0
  11. 简述:bs和cs的区别
  12. Unity开发手游在Android平台的内存优化
  13. 从管好事提升管理水平--创建事
  14. 字幕翻译,如何合并和拆分过分断句
  15. Windows驱动开发工具 WDK 学习笔记
  16. 不允许sam账户和共享的匿名枚举_“不允许SAM帐户和共享的匿名枚举”是什么?...
  17. java 坦克大战连发_Java坦克大战(三)
  18. 18. AutoSAR 系列教程 | BSW的Diagnostics功能
  19. android手机的智能备忘录,智能备忘录app
  20. 微服务架构下的核心话题 (三):微服务架构的技术选型

热门文章

  1. 警惕黑客瞄准你的手机钱包
  2. 什么是网站监控,网站监控软件有什么用?
  3. 草根站长必须领会的三大营销诀窍
  4. 使用python爬虫分析去哪网的景点数据
  5. html5 光影效果,基于 HTML5 WebGL 的 3D 场景中的灯光效果
  6. SQL Server 数据完整性规则
  7. Photoshop纹理——布纹理
  8. Could not register branch into global session xid = %s
  9. 用于一般光学系统的光栅元件
  10. 干涉测量中的衍射效应