matplotlib绘图学习笔记

Matplotlib 是 Python 中最受欢迎的数据可视化软件包之一,支持跨平台运行,它是 Python 常用的 2D 绘图库,同时它也提供了一部分 3D 绘图接口。

Matplotlib 生成的图形主要由以下几个部分构成:

  • Figure:指整个图形,您可以把它理解成一张画布,它包括了所有的元素,比如标题、轴线等;
  • Axes:绘制 2D 图像的实际区域,也称为轴域区,或者绘图区;
  • Axis:指坐标系中的垂直轴与水平轴,包含轴的长度大小(图中轴长为 7)、轴标签(指 x 轴,y轴)和刻度标签;
  • Artist:您在画布上看到的所有元素都属于 Artist 对象,比如文本对象(title、xlabel、ylabel)、Line2D 对象(用于绘制2D图像)等。

在这里插入图片描述

1. 安装和导入

使用pip管理器来安装matplotlib库

pip install matplotlib

验证安装:

%pip show matplotlib
Name: matplotlib
Version: 3.7.2
Summary: Python plotting package
Home-page: https://matplotlib.org
Author: John D. Hunter, Michael Droettboom
Author-email: [email protected]
License: PSF
Location: /Users/a200007/work/notebook/d2l-zh/lib/python3.10/site-packages
Requires: python-dateutil, fonttools, contourpy, kiwisolver, cycler, packaging, numpy, pyparsing, pillow
Required-by: d2l
Note: you may need to restart the kernel to use updated packages.

首先导入 matplotlib 包中的 pyplot 模块,并以 as 起个别名方便使用。

import matplotlib.pyplot as plt
import numpy as np

设置中文字体来处理中文乱码:

plt.rcParams['font.sans-serif'] = ['Songti SC']  # 使用   字体
plt.rcParams['axes.unicode_minus'] = False  

Mac下可用的中文字体参考:Mac下中文乱码处理方法

pyplot 模块提供了可以用来绘图的各种函数,包括绘制2D图形、3D图形、直方图、条形图、散点图等,绘图类型如下表所示。

函数名称 描述
Plot 在坐标轴上画线或者标记
Scatter 绘制x与y的散点图
Hist 绘制直方图
Bar 绘制条形图
Barh 绘制水平条形图
Pie 绘制饼状图
Boxplot 绘制箱型图
his2d 绘制2D直方图
Polar 绘制极坐标图
Stackplot 绘制堆叠图
Stem 用来绘制二维离散数据绘制(又称为“火柴图”)
Step 绘制阶梯图
Quiver 绘制一个二维按箭头(注意:这里可能是Quiver的拼写错误,通常可能是Quiverplot或Quiver,代表箭头图或向量场图)

本文将针对常使用的函数进行介绍,并给出示例。

2. 绘制线条

使用 NumPy 提供的函数 arange() 来生成(0,2π)之间的浮点数序列作为自变量x。

正弦函数是一个周期分布,2* π \pi π正好是一个周期。

x = np.arange(0, np.pi * 2, 0.05)
x
array([0.  , 0.05, 0.1 , 0.15, 0.2 , 0.25, 0.3 , 0.35, 0.4 , 0.45, 0.5 ,
       0.55, 0.6 , 0.65, 0.7 , 0.75, 0.8 , 0.85, 0.9 , 0.95, 1.  , 1.05,
       1.1 , 1.15, 1.2 , 1.25, 1.3 , 1.35, 1.4 , 1.45, 1.5 , 1.55, 1.6 ,
       1.65, 1.7 , 1.75, 1.8 , 1.85, 1.9 , 1.95, 2.  , 2.05, 2.1 , 2.15,
       2.2 , 2.25, 2.3 , 2.35, 2.4 , 2.45, 2.5 , 2.55, 2.6 , 2.65, 2.7 ,
       2.75, 2.8 , 2.85, 2.9 , 2.95, 3.  , 3.05, 3.1 , 3.15, 3.2 , 3.25,
       3.3 , 3.35, 3.4 , 3.45, 3.5 , 3.55, 3.6 , 3.65, 3.7 , 3.75, 3.8 ,
       3.85, 3.9 , 3.95, 4.  , 4.05, 4.1 , 4.15, 4.2 , 4.25, 4.3 , 4.35,
       4.4 , 4.45, 4.5 , 4.55, 4.6 , 4.65, 4.7 , 4.75, 4.8 , 4.85, 4.9 ,
       4.95, 5.  , 5.05, 5.1 , 5.15, 5.2 , 5.25, 5.3 , 5.35, 5.4 , 5.45,
       5.5 , 5.55, 5.6 , 5.65, 5.7 , 5.75, 5.8 , 5.85, 5.9 , 5.95, 6.  ,
       6.05, 6.1 , 6.15, 6.2 , 6.25])

然后使用 sin() 函数计算每个点的 y 值

y = np.sin(x)
y
array([ 0.        ,  0.04997917,  0.09983342,  0.14943813,  0.19866933,
        0.24740396,  0.29552021,  0.34289781,  0.38941834,  0.43496553,
        0.47942554,  0.52268723,  0.56464247,  0.60518641,  0.64421769,
        0.68163876,  0.71735609,  0.75128041,  0.78332691,  0.8134155 ,
        0.84147098,  0.86742323,  0.89120736,  0.91276394,  0.93203909,
        0.94898462,  0.96355819,  0.97572336,  0.98544973,  0.99271299,
        0.99749499,  0.99978376,  0.9995736 ,  0.99686503,  0.99166481,
        0.98398595,  0.97384763,  0.9612752 ,  0.94630009,  0.92895972,
        0.90929743,  0.88736237,  0.86320937,  0.83689879,  0.8084964 ,
        0.7780732 ,  0.74570521,  0.71147335,  0.67546318,  0.6377647 ,
        0.59847214,  0.55768372,  0.51550137,  0.47203054,  0.42737988,
        0.38166099,  0.33498815,  0.28747801,  0.23924933,  0.19042265,
        0.14112001,  0.09146464,  0.04158066, -0.00840725, -0.05837414,
       -0.10819513, -0.15774569, -0.20690197, -0.2555411 , -0.30354151,
       -0.35078323, -0.39714817, -0.44252044, -0.48678665, -0.52983614,
       -0.57156132, -0.61185789, -0.65062514, -0.68776616, -0.72318812,
       -0.7568025 , -0.78852525, -0.81827711, -0.8459837 , -0.87157577,
       -0.89498936, -0.91616594, -0.93505258, -0.95160207, -0.96577306,
       -0.97753012, -0.98684386, -0.993691  , -0.99805444, -0.99992326,
       -0.99929279, -0.99616461, -0.99054654, -0.98245261, -0.97190307,
       -0.95892427, -0.94354867, -0.92581468, -0.90576664, -0.88345466,
       -0.85893449, -0.83226744, -0.80352016, -0.77276449, -0.74007731,
       -0.70554033, -0.66923986, -0.63126664, -0.59171558, -0.55068554,
       -0.50827908, -0.46460218, -0.41976402, -0.37387666, -0.32705481,
       -0.2794155 , -0.23107779, -0.1821625 , -0.13279191, -0.0830894 ,
       -0.03317922])

plot方法可以绘制多个点组成的线条,包括直线、曲线、折线等。下面使用plot方法来绘制正弦曲线。

plt.plot(x, y)
plt.xlabel("角度")
plt.ylabel("正弦")
plt.title("正弦曲线")
plt.show()

在这里插入图片描述

3. 使用figure

使用matplotlib.figure模块可以创建图形对象,图形对象借鉴的是面向对象编程的思想,通过图形对象来调用其它的方法和属性。

  • figure(): 创建图形对象(figure object),并通过图形对象来调用其它的方法和属性,这样能处理多个画布。

    参数 说明
    figsize 指定画布的大小,(宽度,高度),单位为英寸。
    dpi 指定绘图对象的分辨率,即每英寸多少个像素,默认值为80。
    facecolor 背景颜色。
    edgecolor 边框颜色。
    frameon 是否显示边框。
  • add_axes(): 添加坐标轴(绘图区域)对象到画布中,一个figure可以添加多个axes,一个axes就是一个绘图区域。

    对象的位置由参数rect决定, 形如 [left, bottom, width, height] ,它表示添加到画布中的矩形区域的左下角坐标(x, y),以及宽度和高度。
    比如 [ 0.1, 0.1, 0.8, 0.8],它代表着从画布 10% 的位置开始绘制, 宽高是画布的 80%。

fig = plt.figure()
x = np.arange(0, np.pi * 2, 0.05)
main_ax = fig.add_axes([0, 0, 1, 1])
sub_ax = fig.add_axes([0.55, 0.65, 0.3, 0.3])
main_ax.plot(x, np.sin(x), "b-")
sub_ax.plot(x, np.cos(x), "r--")
main_ax.set_title("sin")
sub_ax.set_title("cos")
fig.show()

在这里插入图片描述

axes对象有如下属性/函数可以使用:

函数名称 描述
Text 向轴添加文本
Title 设置当前轴的标题
Xlabel 设置x轴标签
Xlim 获取或者设置x轴区间大小
Xscale 设置x轴缩放比例
Xticks 获取或设置x轴刻标和相应标签
Ylabel 设置y轴的标签
Ylim 获取或设置y轴的区间大小
Yscale 设置y轴的缩放比例
Yticks 获取或设置y轴的刻标和相应标签
grid 开启网格
xticklabels 获取或设置坐标刻度标签

ax.plot(x, y, kwargs): 将x和y两个数组组成的坐标点绘制成线,一个plot是一个线条,可以多个线条叠加。kwargs常用参数有:

  • linewidth: 线宽,单位为像素
  • linestyle: 线形,如实线、虚线等,线型代码见下表
    字符 描述
    ‘-’ 实线
    ‘–’ 虚线
    ‘-.’ 点划线
    ‘:’ 虚线(注意:Markdown中’:'通常不表示虚线)
    ‘H’ 六角标记(注意:Markdown中’H’通常不表示图形标记)
  • marker: 坐标点形状,如圆点、方形等,标记符号代码见下表
    标记符号 描述
    ‘.’ 点标记
    ‘o’ 圆圈标记
    ‘x’ 'X’标记
    ‘D’ 钻石标记
    ‘H’ 六角标记
    ‘s’ 正方形标记
    ‘+’ 加号标记
  • markersize: 点的像素大小,例如:10
  • color: 颜色,如red、blue等,颜色代码见下表
    字符 颜色
    ‘b’ 蓝色
    ‘g’ 绿色
    ‘r’ 红色
    ‘c’ 青色
    ‘m’ 品红色
    ‘y’ 黄色
    ‘k’ 黑色
    ‘w’ 白色

4. legend绘制标签

ax.legend(labels, loc)
  • labels 是一个字符串序列,用来指定标签的名称,一般每个plot都应该有一个标签名称。
  • loc 是指定图例位置的参数,其参数值可以用字符串或整数来表示;

loc 参数的表示方法,分为字符串和整数两种,如下所示:

位置 字符串表示 整数数字表示
自适应 Best 0
右上方 upper right 1
左上方 upper left 2
左下 lower left 3
右下 lower right 4
右侧 right 5
居中靠左 center left 6
居中靠右
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉下心来学鲁班

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值