美文网首页
Matplotlib官方文档 1 - A Simple Exam

Matplotlib官方文档 1 - A Simple Exam

作者: 蜘蛛鱼 | 来源:发表于2021-04-23 16:38 被阅读0次

对matplotlib的官方文档做一个简单的总结方便查阅。
来源:https://matplotlib.org/stable/tutorials/introductory/usage.html#sphx-glr-tutorials-introductory-usage-py

首先导入Matplotlib与Numpy:

import matplotlib.pyplot as plt
import numpy as np

一个简单的例子

在Matplotlib中,整个图像为一个Figure对象。
在Figure对象中可以包含一个,或者多个Axes对象。每个Axes对象都是一个拥有自己坐标系统的绘图区域,可以是x-y坐标,或极坐标,或x-y-z的3D坐标。
创建一个带有axes的figure的方法:

fig, ax = plt.subplots() # 创建一个带有一个axes的figure
ax.plot([1,2,3,4],[1,4,2,3]) #在axes上画图

直接画图会在当前的axes自动画图,若没有会创建一个axes和它的父figure。所以可以直接:

plt.plot([1,2,3,4],[1,4,2,3])

Figure的成分

这个图可以帮助理解Matplotlib中figure的各种成分。


Figure

Figure指整个图像,可以包含多个Axes。创建Figure的方法如下:

fig = plt.figure()  # 没有Axes的空figure
fig, ax = plt.subplots()  # 包含一个Axes
fig, axs = plt.subplots(2, 2)  # 包含2乘2个Axes

通常是一起创建Figure与Axes,不过也可以先创建Figure之后再添加Axes。

Axes

Axes就是你画的一个plot的区域。一个Figure包含多个Axes,但一个Axes只能在一个Figure里面。
Axes包含几个Axis(坐标轴)对象。每个Axes包含一个标题(set_title()),x-label(set_xlabel())与y-label(set_ylabel())。

Axis

Axis即坐标轴,他们负责图表的limits,刻度以及刻度的标签。刻度的位置由Locator对象来决定,刻度的标签字符串由 Formatter来形成。LocatorFormatter一起形成合适的坐标轴的可视化。

Artist

基本上,Figure上你能看到的所有东西都是一个artist,甚至包括Figures,Axes等对象。它包括Text对象,Line2D对象,collections对象,...等等。

画图时候的输入

所有的画图函数都可以输入numpy.array或者numpy.ma.masked_arraypandas的对象或者numpy.matrix有可能不行,所以画图前最好都转化为numpy.array对象。

面向对象的界面与pyplot界面

有两种方法使用Matplotlib画图:

  1. 面向对象的方法,创建figures与axes,再调用他们的方法(Methods)。
    比如:
x = np.linspace(0, 2, 100)

#虽然在面向对象的方法,但是我们创建figure还是使用`.pyplot.figure`。
fig,ax = plt.subplots() # 创建一个figure与axes
ax.plot(x, x, label = 'linear') # 在axes画图
ax.plot(x, x**2, label = 'quadratic') # 在axes画更多数据
ax.plot(x, x**3, label = 'cubic') # 继续在axes添加……
ax.set_xlabel('x label') # 给axes添加x-label
ax.set_ylabel('y label') # 给axes添加y-label
ax.set_title('Simple Plot') # 给axes添加标题
ax.legend() # 添加legend
  1. 利用pyplot自动创建与修改figures与axes,利用pyplot的函数来画图。
    比如:
x = np.linspace(0, 2, 100)

plt.plot(x, x, label='linear')  # 在默认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()

两种方法都可以用来Matplotlib画图,不过通常建议在可交互的plotting(比如Jupyter Notebook)当中使用pyplot方式,在非交互的情况下(如在函数中或者script中)使用面向对象的方式。

创建画图函数

我们有时候会需要用不同的数据重复画同一个图,这时候创建一个函数会非常方便。比如:

def my_plotter(ax, data1, data2, param_dict):
    """
    用于画图的一个函数。

    参数
    ----------
    ax : Axes
        要画的axes

    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

之后可以这么使用:

data1, data2, data3, data4 = np.random.randn(4,100)
fig,ax = plt.subplots(1,1)
my_plotter (ax, data1, data2, {'marker': 'x'})

创建两个subplots时:

fig, (ax1, ax2) = plt.subplots(1, 2)
my_plotter(ax1, data1, data2, {'marker': 'x'})
my_plotter(ax2, data3, data4, {'marker': 'o'})

Backend与Performance

此部分详见原链接。

后端的设置方法有三种:

  1. The rcParams["backend"] parameter in your matplotlibrc file
  2. The MPLBACKEND environment variable
  3. The function matplotlib.use()

相关文章

网友评论

      本文标题:Matplotlib官方文档 1 - A Simple Exam

      本文链接:https://www.haomeiwen.com/subject/krwcrltx.html