iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python Matplotlib初阶使用入门教程
  • 926
分享到

Python Matplotlib初阶使用入门教程

2024-04-02 19:04:59 926人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录0. 前言1. 创建Figure的两种基本方法1.1 第1种方法1.2 第2种方法2. Figure的解剖图及各种基本概念2.1 Figure2.2 Axes2.3 Axis2.

0. 前言

本文介绍python Matplotlib库的入门求生级使用方法。

为了方便以下举例说明,我们先导入需要的几个库。以下代码在Jupyter Notebook中运行。


%matplotlib inline     
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

1. 创建Figure的两种基本方法

1.1 第1种方法

注意,Figure在Matplotlib中是一个专有名词(后面会有解释),Matplotlib把你的数据以图的形式绘制在Figure(比如说,windows, Jupyter wgets, etc.)中。创建一个Figure的基本方式之一就是使用pyplot.subplots.
如下所示,我们用pyplot.subplots创建了一个Figure,其中包含一个axes(同样,这是一个Matplotlib专有名词,后面再进行解释),然后再利用axes.plot画图。


fig, ax = plt.subplots()  # Create a figure containing a single axes.
x    = np.arange(100)
Fs   = 100  # 100Hz sampling rate
Fsin = 2    # 2Hz 
y = np.sin(2*np.pi*Fsin*(1/Fs)*x)
ax.plot(x, y)  # Plot some data on the axes.

以上代码画了一个正弦波的波形。

1.2 第2种方法

许多其它的绘图工具库或者语言并不要求你必须显式地(explicity)先创建一个Figure以及axes,比如说在Matlab中,你直接如下所示一样直接调用plot()函数就一步到位地得到所想要的图,如果现成的axes的话,matlab会为你创建一个.

plot([1, 2, 3, 4], [1, 4, 2, 3]) % MATLAB plot.

事实上,你也可以以这种方式使用Matplotlib。对于每一个axes的绘图方法,matplotlib.pyplot模块中都有一个对应的函数执行在当前axes上画一个图的功能,如果还没有已经创建好的axes的话,就先为你创建一个Figure和axes,正如在Matlab中一样。因此以上例子可以更简洁地写为:


plt.plot(x, y)  # Call plt.plot() directly

同样会得到以上相同的图。

2. Figure的解剖图及各种基本概念

上图出自Ref1。图中给出了matplotlib中Figure(没有想好这个到底应该怎么翻译。本来想是不是可以译成画布,但是画布对应英文中的canvas。而Figure的说明中明确指出了Figure包含了Canvas,如果说Canvas是指画布的话,那Figure其实是指整个一幅画。还是不勉强吧,直接用英语单词好了)

2.1 Figure

The whole figure.整幅画或整个图。Figure保持其中所有的child axes的信息,以及一些特殊的artists (titles, figure legends, etc)(这里artist又是很难翻译的一个词,指的是标题、图例等图的说明性信息对象),以及画布(canvas)。
可以说Figure是幕后的大Boss管理着所有的信息,是它真正执行为你绘制图画的动作。但是作为用户,它反而是不太显眼的,对你来说多少有点隐形的样子。一个Figure中可以包含任意多个axes,通常至少包含一个。

以下是创建Figure的几种方式,其中前两种在上面的例子已经介绍,也是常用的。
最后一种是创建一个空的Figure,可以在之后给它添加axes。这种做法不常见,属于高阶用法,方便高阶用户进行更加灵活的axes布局。


fig, ax = plt.subplots()  # a figure with a single Axes
fig, axs = plt.subplots(2, 2)  # a figure with a 2x2 grid of Axes
fig = plt.figure()  # an empty figure with no Axes

2.2 Axes

Axes原本是axis(坐标)的复数,所以可以翻译成坐标系?就这么理解着吧。一个给定的Figure可以包含多个axes,但是一个axes对象只能存在于一个Figure中。(按坐标系理解的话,故名思意)一个Axes包含多个axis,比如说在2D(2维)的图中有两个坐标轴,在3D(3维)图中有三个坐标轴。
在一个axes中可以通过以下一些方法来设置图的一些属性:
set_xlim(),set_ylim():分别用于设置x轴、y轴的表示范围
set_title():设置图的标题
set_xlabel(),set_ylabel(): 分别用于设置x轴和y轴的标签

Axes类和它的成员函数是matplolib的面向对象的界面的主要入口(关于面向对象接口与pyplot接口参见后面的说明)

2.3 Axis

这个就是我们常说的坐标轴。不再赘述。事实上,越解释越糊涂。。。有兴趣的小伙伴可以看看matplotlib文档的原始说明,反正我是越看越晕。。。还不如直接看代码例直到怎么使用就可以了。

2.4 Artist

Basically, everything you can see on the figure is an artist (even the Figure, Axes, and Axis objects). This includes Text objects, Line2D objects, collections objects, Patch objects ... (you get the ea). When the figure is rendered, all of the artists are drawn to the canvas. Most Artists are tied to an Axes; such an Artist cannot be shared by multiple Axes, or moved from one to another.

晕菜。。。同上,还不如直接看代码例直到怎么使用就可以了^-^

3. 绘图函数的输入

所有的绘图函数都接受numpy.array or numpy.ma.masked_array作为输入。
像pandas中的数据对象以及numpy.matrix等类似于数组('array-like')的对象如果直接用于绘图函数的输入的话有可能会产生意想不到的结果。所以最好把它们先转换成numpy.array对象再传递给绘图函数。


# For example, to convert a pandas.DataFrame
a = pd.DataFrame(np.random.rand(4, 5), columns = list('abcde'))
a_asarray = a.values
 
# and to convert a numpy.matrix
b = np.matrix([[1, 2], [3, 4]])
b_asarray = np.asarray(b)

4. 面向对象接口与pyplot接口

如上所述,有两种基本的使用Matplotlib的方法。

(1) 显式地创建Figure和axes,然后调用方法作用于它们,这个称之为面向对象风格。

(2) 直接调用pyplot进行绘图,这个姑且称之为快捷风格吧

面向对象风格的使用方法示例:


x = np.linspace(0, 2, 100)
 
# Note that even in the OO-style, we use `.pyplot.figure` to create the figure.
fig, ax = plt.subplots()  # Create a figure and an axes.
ax.plot(x, x, label='linear')  # Plot some data on the axes.
ax.plot(x, x**2, label='quadratic')  # Plot more data on the axes...
ax.plot(x, x**3, label='cubic')  # ... and some more.
ax.set_xlabel('x label')  # Add an x-label to the axes.
ax.set_ylabel('y label')  # Add a y-label to the axes.
ax.set_title("Simple Plot")  # Add a title to the axes.
ax.legend()  # Add a legend.

快捷(pyplot)风格的使用方法示例:


x = np.linspace(0, 2, 100)
 
plt.plot(x, x, label='linear')  # Plot some data on the (implicit) axes.
plt.plot(x, x**2, label='quadratic')  # etc.
plt.plot(x, x**3, label='cubic')
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()

以上代码中同时给出了两种风格中的label、title、legend等设置的方法或函数使用例。

以上两段代码示例产生同样的绘图效果:

此外,还有第三种方法,用于在GUI应用中的嵌入式Matplotlib。这个属于进阶用法,在本文就不做介绍了。

面向对象风格和pyplot风格功能相同同样好用,你可以选择使用任何一种风格。但是最好选定其中一种使用,不要昏庸。一般来说,建议仅在交互式绘图(比如说在Jupyter notebook)中使用pyplot风格,而在面向非交互式绘图中则推荐使用面向对象风格。

注意,在一些比较老的代码例中,你还可以看到使用pylab接口。但是现在不建议这样用了(This approach is strongly discouraged nowadays and deprecated)。这里提一嘴只是因为偶尔你还可能看到它,但是,在新的代码不要用就好了。

5. 绘图复用实用函数例

通常我们会发现需要重复绘制很多相类似的图,只是采用不同的数据而已。为了提高效率减少错误,可以考虑将一些绘图处理封装成一个函数,以便于重复使用,避免过多的冗余代码。以下是一个这样的模板例子:


def my_plotter(ax, data1, data2, param_dict):
    """
    A helper function to make a graph
    Parameters
    ----------
    ax : Axes
        The axes to draw to
    data1 : array
       The x data
    data2 : array
       The y data
    param_dict : dict
       Dictionary of kwargs to pass to ax.plot
    Returns
    -------
    out : list
        list of artists added
    """
    out = ax.plot(data1, data2, **param_dict)
    return out

然后你可以以如下方式使用:


x = np.linspace(0, 5, 20)
fig, ax = plt.subplots()
x2 = x**2
x3 = x**3
my_plotter(ax, x, x2, {'marker': 'o'})
my_plotter(ax, x, x3, {'marker': 'd'})

或者,如果你需要多个子图的话,


x = np.linspace(0, 5, 20)
x2 = x**2
x3 = x**3
fig, (ax1, ax2) = plt.subplots(1, 2)
my_plotter(ax1, x, x2, {'marker': 'x'})
my_plotter(ax2, x, x3, {'marker': 'o'})
 
fig, ax = plt.subplots(1, 2)
my_plotter(ax[0], x, x2, {'marker': 'x'})
my_plotter(ax[1], x, x3, {'marker': 'o'})

注意,如以上代码例所示,当创建了多个子图时,有两种引用axes的方式。第一种方式中,创建时直接将两个axes(每个子图对应一个axes)赋给ax1和ax2。第一种方式中,创建时直接将两个axes赋给一个axes数组ax,然后以ax[0]和ax[1]的格式进行引用。

Ref1: Usage Gue — Matplotlib 3.4.3 documentation

到此这篇关于Python Matplotlib初阶使用入门的文章就介绍到这了,更多相关Python Matplotlib使用入门内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python Matplotlib初阶使用入门教程

本文链接: https://www.lsjlt.com/news/157476.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python Matplotlib初阶使用入门教程
    目录0. 前言1. 创建Figure的两种基本方法1.1 第1种方法1.2 第2种方法2. Figure的解剖图及各种基本概念2.1 Figure2.2 Axes2.3 Axis2....
    99+
    2024-04-02
  • Python编程使用matplotlib挑钻石seaborn画图入门教程
    目录scatter_plotlmplotjointplot挑钻石第二弹 seaborn是matplotlib的补充包,提供了一系列高颜值的figure,并且集成了多种在线数据集,通过...
    99+
    2024-04-02
  • Python入门进阶教程-JSON操作
    什么是JSON?JSON 的全称是 JavaScript Object Notation,即 JavaScript 对象符号,它是一种轻量级、跨平台、跨语言的数据交换格式,其设计意图是把所有事情都用设计的字符串来表示,这样既方便在互联网上传...
    99+
    2023-06-02
  • 入门教程:学习使用matplotlib绘制折线图
    简易教程:学会使用Matplotlib绘制折线图 引言:Matplotlib是Python中常用的绘图库之一,可以用于绘制各种类型的图形,包括折线图。折线图是一种常用的数据可视化方式,能够清晰展示数据的变化趋势。本文将通过具体的...
    99+
    2024-01-17
    教程 折线图
  • MQTT.js入门使用教程
    目录简介安装使用 npm 或 yarn 安装使用 CDN 安装全局安装使用简单例子命令行API 介绍mqtt.connect([url], options)Client 事件Clie...
    99+
    2023-05-16
    MQTT.js 入门 MQTT.js 入门教程 MQTT.js使用
  • Next.js入门使用教程
    目录简介创建Next.js项目 手动创建Next.js项目creact-next-app快速创建项目 Pages 路由 Link Router 参数传递与接收 动态路由 钩子事件 获...
    99+
    2024-04-02
  • Python入门之集合的使用教程
    目录前序集合操作创建集合访问集合判断集合是存在指定值集合添加集合删除集合函数返回集合的副本判断集合内是否包含另一个集合并集差集交集补集交集判断前序 在Python中,集合(Set) ...
    99+
    2024-04-02
  • Python入门之字典的使用教程
    目录前沿字典操作创建字典嵌套字典dict() 创建字段访问字典中的值更新字典删除字典元素检查键是否存在字典的遍历字典函数获取字段的长度复制字典批量创建键前沿 Python字典是一种可...
    99+
    2024-04-02
  • ZAM 3D入门教程(1):初识ZAM
    Electric Rain ZAM 3D是一个功能齐全的3D建模软件,可轻松创建,定制和动画基于Windows Vista 应用的3D界面要素. 用于快速创建3D网格,并让3D网格动起来。Electric Rain ZAM 3D自动生成XA...
    99+
    2023-01-31
    入门教程 ZAM
  • Python入门教程(二)
      今天讲编程思维。  可能这对初次接触编程的人有用——我不是不想切入正题,我只是想强调根本没什么正题,我可能在其他文章里提过这一点。“编程语言就是语法糖”,可能你不知道什么是语法糖,但是知道的人也未必认同我。我不保证你们能听懂……pyth...
    99+
    2023-01-31
    入门教程 Python
  • Python Qt5 入门教程
    Python Qt5 入门教程 Python Qt5是一个强大的GUI工具包,可以用来设计各种桌面应用程序,包括图形用户界面、数据库应用程序等。本教程将带你入门Python Qt5,从安装开始到图形界面的设计以及常见的控件和事件。 安装...
    99+
    2023-08-31
    python ubuntu linux Qt5
  • Python NLP 入门教程
    本文简要介绍Python自然语言处理(NLP),使用Python的NLTK库。NLTK是Python的自然语言处理工具包,在NLP领域中,最常使用的一个Python库。什么是NLP?简单来说,自然语言处理(NLP)就是开发能够理解人类语言的...
    99+
    2023-01-31
    入门教程 Python NLP
  • python入门教程(一)
      我们依然不讲代码,而是先说命令行。   为什么命令行如此重要?之前说到,命令行是你和电脑对话的地方。你可以用句子的方式把信息发给电脑,电脑再以句子的方式给你回应。在编程领域,有些消息只能用命令行告诉电脑——或许是编程人员早就习惯了,或许...
    99+
    2023-01-31
    入门教程 python
  • python入门教程(零)
    (本文针对Windows)   Python是什么?是一种编程语言。编程语言是什么?就是和机器说话的方式。编译器和解释器好比翻译,把你的话翻成机器听得懂的。但是这些翻译不怎么智能(虽然也有高下),你必须说一套很机械的官腔,他们才帮你翻译——...
    99+
    2023-01-31
    入门教程 python
  • Android Studio 使用入门教程
    作者:禅与计算机程序设计艺术 1.简介 近年来,移动端应用数量急剧增加,占据了智能手机市场绝大多数份额,应用开发者也需要具备较高的编程能力和素质。相比于传统开发流程,采用Android系统带来的开源...
    99+
    2023-10-21
    大数据 人工智能 语言模型 Java Python 架构设计
  • python对RabbitMQ的简单入门使用教程
    目录(一)RabbitMQ的简介(二)RabbitMQ的安装(三)python操作RabbitMQ(四)RabbitMQ简单模式(五)RabbitMQ发布订阅模式(六)RabbitM...
    99+
    2024-04-02
  • python之selenium入门教程
    selenium,一个第三方库,可以通过给driver发送命令来操作浏览器,以达到模拟人操作浏览器,实现网页自动化、测试等,减少了重复性工作。 selenium的工作的基本架构如下: 安装 本文是在...
    99+
    2023-09-11
    python selenium
  • Python入门教程(八)PythonCasting用法
    目录指定变量类型指定变量类型 有时您可能需要为变量指定类型,这可以通过 casting 来完成,Python 是一门面向对象的语言,因此它使用类来定义数据类型,包括其原始类型。 因此...
    99+
    2023-05-15
    Python Casting Python Casting用法
  • Python API教程:API入门
    什么是API? 一个API,或被称为应用程序接口,是一个服务器为你提供一个接收或发送数据的代码。API通常用来接收数据。 本文就集中焦点在此话题中。 当我们想从一个API中接收数据,我们需要开始请求。...
    99+
    2023-09-07
    python 开发语言
  • python入门基础教程
    Python是一门简单易学、功能强大的编程语言,适合初学者入门。下面是一个简要的Python入门基础教程,帮助您快速上手Python编程。1. 安装Python:首先,您需要在计算机上安装Python解释器。您可以从Python官方网站(h...
    99+
    2023-10-25
    python 入门 基础教程
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作