matplotlib可视化:基础绘图函数使用【函数功能+案例代码】

本文详细介绍Matplotlib的基础用法,包括图形对象创建、坐标轴设置、子图绘制等,并通过实例代码展示了如何设置图例、网格及坐标轴等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列文章目录

matplotlib可视化:基础绘图函数使用【函数功能+案例代码】
matplotlib可视化:基础图像绘制
matplotlib可视化:局部放大折线图+阴影区间绘制【原理+代码】



前言

由于毕设写论文需要绘图,记录一下matplotlib学习笔记。


一、matplotlib简介

首先附上官网链接:matplotlib官网链接
下载matplotlib:

pip install matplotlib

Matplotlib 由三个层次结构组成:脚本层、美工层和后端层。

  • 脚本层:最顶层,大部分代码都在该层运行,主要负责生成图形与坐标系。
  • 美工层:结构中的第二层,提供了绘制图形的元素时的各种功能。例如:绘制标题、轴标签、坐标刻度等。
  • 后端层:最底层,定义了三个基本类:FigureCanvas(提供绘图画布);Renderer(提供绘图各种方法);Event(来处理鼠标和键盘事件)

在这里插入图片描述

  • Figure:画布,包括了所有的元素,比如标题、轴线等;
  • Axes:绘图区,绘制2D图像区域。
  • Axis:坐标系中的垂直轴与水平轴,包含轴长,轴标签,刻度标签。
  • Artist:画布上所有元素都属于 Artist 对象,如文本对象(title、xlabel、ylabel)、Line2D 对象(用于绘制2D图像)等。

二、基础函数用法

2.1 figure图形对象

通过plt.figure创建一个画布对象;函数的参数值如下:

参数说明
figsize指定画布的大小,(宽度,高度),单位为英寸。
dpi指定绘图对象的分辨率,即每英寸多少个像素,默认值为80。
facecolor背景颜色。
edgecolor边框颜色。
frameon是否显示边框。

示例如下:

import matplotlib.pyplot as plt
import numpy as np
import math

#数据
x = np.arange(0, math.pi*2, 0.05)
y = np.sin(x)
#创建一个画布对象fig
fig=plt.figure(figsize=(10,10),dpi=100,facecolor='#B6D6F0',edgecolor='black',frameon=True)
"""
# figsize	指定画布的大小,(宽度,高度),单位为英寸。
# dpi	指定绘图对象的分辨率,即每英寸多少个像素,默认值为80。
# facecolor	背景颜色。
# edgecolor	边框颜色。
# frameon	是否显示边框。
"""
#绘制坐标轴的范围
#add_axes() 的参数值是一个序列,序列中的 4 个数字分别对应图形的左侧,底部,宽度,和高度,且每个数字必须介于 0 到 1 之间。
ax=fig.add_axes([0.3,0.3,0.5,0.5])
#设置x轴,y轴标签
ax.set_xlabel("angle")
ax.set_ylabel("sin(x)")
#设置图像标题
ax.set_title("y=sin(x)")
#绘制图像
ax.plot(x,y)
#展示图象
plt.show()

在这里插入图片描述

2.2 axes类使用

Matplotlib 定义了 axes 类,该类的对象被称为 axes 对象。它指定了一个有数值范围限制的绘图区域。在一个给定的figure中可以包含多个 axes 对象,但是同一个 axes 对象只能在一个画布中使用。

2.2.1 创建axes对象

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

将画布的宽、高作为 1 个单位。比如,[ 0.1, 0.1, 0.8, 0.8],它代表着从画布 10% 的位置开始绘制, 宽高是画布的 80%。
在这里插入图片描述

2.2.2 axes.legend()绘制图例

axes的legend方法可以绘制图例,方法如下:

ax.legend(labels, loc)

其中,labels 是一个字符串序列,用来指定标签的名称;loc 是指定图例位置的参数,其参数值可以用字符串或整数来表示,可选位置参数如下:

位置字符串表示整数数字表示
自适应best0
右上方upper right1
左上方upper left2
左下lower left3
右下lower right4
右侧right5
居中靠左center left6
居中靠右center right7
底部居中lower center8
上部居中upper center9
中部center10

举例:

ax.legend(labels = ('tv', 'Smartphone'), loc = 'lower right')

同时可以修改图例的大小:

ax.legend(prop = {'size':6})

还可以自定义图例的位置:(0,0)表示的是图的左下角,坐标的数值表示的是比例。

plt.legend(bbox_to_anchor=(0.3,0.5))

图例的样式也可以调整,默认的图例样式是竖排的。比如我们有两个图例,那么我们设置下面这个为2,就是默认并排展示,而不是并列展示

legend(ncol=2)

2.2.3 axes.plot()绘制图像

plot函数的可选参数主要用于设置线条类型,颜色,标记。

颜色标识颜色类型标记符号标记描述线型线型描述
‘b’蓝色‘.’点标记‘-’实线
‘g’绿色‘o’圆圈标记‘–’虚线
‘r’红色‘x’'X’标记‘-.’点划线
‘c’青色‘H’六角标记‘:’虚线
‘m’品红色‘s’正方形标记‘H’六角标记
‘y’黄色‘+’加号标记
‘k’黑色‘D’钻石标记
‘w’白色

对于axes类的方法使用,示例代码如下:

import matplotlib.pyplot as plt

#创建画布
fig=plt.figure(dpi=100)
#创建axes
ax=fig.add_axes([0.1,0.1,0.8,0.8])
#绘图
ax.plot([1,2,3,4],[1,3,6,9],'ro-')
ax.plot([1,2,3,4],[2,5,8,12],'bH-.')
#设置图例
ax.legend(labels=('twitter','weibo'), loc='best')
#设置坐标轴
ax.set_xlabel("time")
ax.set_ylabel("visit")
#设置图像标题
ax.set_title("compare")
#展示图片
plt.show()

同时linestyle参数可以设置线型,linewidth可以设置线宽。
在这里插入图片描述
在一个画布里面可以拥有多个ax对象,示例代码如下:

    fig=plt.figure(dpi=100)
    ax1,ax2=fig.add_axes([0.1,0.1,0.8,0.8]),fig.add_axes([0.58,0.15,0.26,0.26])
    #绘制第一个图像
    ax1.plot([1,2,3,4],[3,5,7,10],'bD-')
    ax1.plot([1,2,3,4],[2,6,8,14],'r+:')
    ax1.set_xlabel("time")
    ax1.set_ylabel("count")
    ax1.set_title("graph-one")
    ax1.legend(labels=['line1','line2'],loc='best')
    #绘制第二个图象
    ax2.plot([1,2,3,4],[3,5,7,10],'rD-')
    ax2.plot([1,2,3,4],[2,6,8,14],'b+:')
    ax2.set_xlabel("time")
    ax2.set_ylabel("count")
    ax2.set_title("graph-two")
    ax2.legend(labels=['line1','line2'],loc='best')
    plt.show()

在这里插入图片描述

2.3 绘制子图

2.3.1 subplots()函数

subplots() 既创建了一个包含子图区域的画布,又创建了一个 figure 图形对象:

fig , ax = plt.subplots(nrows, ncols)

nrows 与 ncols 表示两个整数参数,它们指定子图所占的行数、列数。返回值是一个元组,包括一个图形对象和所有的 axes 对象。其中 axes 对象的数量等于 nrows * ncols,且每个 axes 对象均可通过索引值访问(从1开始)。
示例:

import matplotlib.pyplot as plt
import numpy as np
import math

#创建画布和多个子图axes
fig,ax=plt.subplots(2,2)
fig.figsize=(8,6)
#x轴数据
x=np.arange(1,10,1)
#对多个子图进行绘制
ax[0][0].plot(x,np.sin(x))
ax[0][0].set_title("y=sin(x)")

ax[0][1].plot(x,np.cos(x))
ax[0][1].set_title("y=cos(x)")

ax[1][0].plot(x,np.log(x))
ax[1][0].set_title("y=log(x)")

ax[1][1].plot(x,np.exp(x))
ax[1][1].set_title("y=exp(x)")
#展示图像
plt.show()

在这里插入图片描述

2.3.2 subplot2grid()函数

subplot2gird() 函数以非等分的形式对画布进行切分,并按照绘图区域的大小来展示最终绘图结果。

plt.subplot2grid(shape, location, rowspan, colspan)

参数含义如下:

  • shape:把该参数值规定的网格区域作为绘图区域;
  • location:在给定的位置绘制图形,初始位置 (0,0) 表示第1行第1列;
  • rowsapan/colspan:这两个参数用来设置让子区跨越几行几列。
import matplotlib.pyplot as plt
import numpy as np


a1 = plt.subplot2grid((3,3),(0,0),colspan=3)
a2 = plt.subplot2grid((3,3),(1,0), rowspan = 2)
a3 = plt.subplot2grid((3,3),(1,1),rowspan = 2, colspan = 2)

x = np.arange(1,10)
a2.plot(x, x*x)
a2.set_title('square')
a1.plot(x, np.exp(x))
a1.set_title('exp')
a3.plot(x, np.log(x))
a3.set_title('log')
plt.tight_layout()
plt.show()

在这里插入图片描述

2.4 网格设置grid()

grid() 方法可以开启或者关闭画布中的网格(即是否显示网格)以及网格的主/次刻度;设置网格的颜色、线型以及线宽等属性。

grid(color='b', ls = '-.', lw = 0.25)
  • color:颜色设置
  • ls:网格线型设置
  • lw:网格线宽度设置

示例代码如下:

import matplotlib.pyplot as plt
import numpy as np
#数据源
x = np.arange(1,11)
#创建画布和子图
fig,ax=plt.subplots(1,3,figsize=(9,3))
#设置子图
ax[0].plot(x,x**2,'bo-')
ax[0].set_title("y=x^2")
ax[0].set_xlabel("x")
ax[0].set_ylabel("x^2")
ax[0].grid(color='b', ls = '-.', lw = 0.25)

ax[1].plot(x,x**3,'rH-.')
ax[1].set_title("y=x^3")
ax[1].set_xlabel("x")
ax[1].set_ylabel("x^3")
ax[1].grid(color='k', ls = '-', lw = 0.15)

ax[2].plot(x,x*2,'mD:')
ax[2].set_title("y=x*2")
ax[2].set_xlabel("x")
ax[2].set_ylabel("x*2")
ax[2].grid(color='r', ls = ':', lw = 0.35)

plt.tight_layout()
plt.show()

在这里插入图片描述

2.5 坐标轴设置

2.5.1 对数刻度设置

在数据范围广的时候,往往采用对数刻度,代码如下:

ax.xscale("log")或ax.yscale("log")

示例代码

import matplotlib.pyplot as plt
import numpy as np

#数据
x = np.arange(1,9,1)
#创建画布和子图
fig, ax = plt.subplots(1, 2, figsize=(10,4))
#绘图
ax[0].plot(x,x)
ax[0].set_title("Normal scale")
ax[0].set_xlabel("x axis")
ax[0].set_ylabel("y axis")

ax[1].set_yscale("log")
ax[1].plot(x,x)
ax[1].set_title("Logarithmic scale (y)")
ax[1].set_xlabel("x axis")
ax[1].set_ylabel("y axis")

plt.tight_layout()
plt.show()

在这里插入图片描述

2.5.2 坐标轴颜色,线宽设置

通过ax.spines获取坐标轴字典,坐标轴包括4个:上下左右。可以通过set_color,set_linewidth设置颜色和线宽。示例代码如下:

    fig = plt.figure()
    ax = fig.add_axes([0.2, 0.2, 0.7, 0.7])
    ax.spines['bottom'].set_color('red')
    ax.spines['left'].set_linewidth(2)
    ax.spines['right'].set_color(None)
    ax.spines['top'].set_color(None)
    ax.plot([1, 2, 3, 4, 5])
    plt.show()

在这里插入图片描述

2.5.3 坐标轴范围

通过set_xlim,set_ylim实现。

#设置y轴
a1.set_ylim(0,10000)
#设置x轴
a1.set_xlim(0,10)

2.5.4 坐标轴刻度,刻度标签

对于坐标轴的刻度,通过set_xticks或set_yticks实现;对于坐标轴的刻度标签,在设置好坐标轴刻度的前提下,将标签与刻度一一对应,采用set_xticklabels或set_yticklabels进行设置。示例代码如下:

    #数据
    x = np.arange(0, math.pi * 2, 0.05)
    #生成画布对象
    fig = plt.figure()
    # 添加绘图区域
    ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
    #绘图
    ax.plot(x, np.sin(x))
    #设置x轴标签
    ax.set_xticks([0, 2, 4, 6])
    # 设置x轴刻度标签
    ax.set_xticklabels(['zero', 'two', 'four', 'six'])
    # 设置y轴刻度
    ax.set_yticks([-1, 0, 1])
    plt.show()

在这里插入图片描述
同时,通过plt.tick_params(labelsize=7)可以设置标签刻度的字体大小。
或者plt.tick_params(‘y’,labelcolor=“#1111FF”)可以设置标签的颜色和更改坐标轴类型。

2.6 字体设置问题

一般论文采用中文宋体和英文Times New Roman字体,参考博客:字体设置进行了字体设置。
【方法一】

def draw01():
    plt.rcParams['font.sans-serif'] = ['SongNTR'] ##设置字体
    plt.rcParams["axes.unicode_minus"]=False #该语句解决图像中的“-”负号的乱码问题

    year = [2017, 2018, 2019, 2020]
    people = [20, 40, 60, 70]
    #生成图表
    plt.plot(year, people)
    plt.xlabel('年份')
    plt.ylabel('人口')
    plt.title('人口增长-1')
    #设置纵坐标刻度
    plt.yticks([0, 20, 40, 60, 80])
    #显示图表
    plt.show()

【方法二】

def draw02():
    plt.rcParams['font.sans-serif'] = ['Times New Roman']
    plt.rcParams['axes.unicode_minus'] = False

    year = [2017, 2018, 2019, 2020]
    people = [20, 40, 60, 70]
    #生成图表
    plt.plot(year, people)
    plt.xlabel('年份',fontproperties='simsun')
    plt.ylabel('人口',fontproperties='simsun')
    plt.title('人口增长-2',fontproperties='simsun')
    #设置纵坐标刻度
    plt.yticks([0, 20, 40, 60, 80])
    #显示图表
    plt.show()

2.7 文本和箭头设置

2.7.1 文本设置

Axes.text(x, y, s, fontdict=None, **kwargs)

参数:

  • x,y:文本位置,以数据坐标形式展示。
  • s:文本内容
  • fontdict:字体相关设置

【举例】
可以指定以坐标轴坐标表示的文本((0,0)为左下,(1,1)为右上角)。下面的例子将文本放在坐标轴的中心

text(0.5, 0.5, 'matplotlib', horizontalalignment='center',
     verticalalignment='center', transform=ax.transAxes,color='r')

transform=ax.transAxes可以让文字的位置坐标针对于坐标轴的相对比例进行定位,color可以修改文本颜色

2.7.2 箭头设置

Axes.arrow(x, y, dx, dy, **kwargs)

增加一个箭头,从(x, y) 到(x+dx, y+dy)
参数:

  • width:设置箭头尾部宽度
  • head_width:设置箭头头部宽度
  • shape:{‘full’, ‘left’, ‘right’},default: ‘full’

举例:

ax.arrow(0.1,0.7,0,0.15,shape='full',width=0.025,head_width=0.05,fc="#FF2727",alpha=0.5,ec=None,linewidth=0)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

oax_knud

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

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

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

打赏作者

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

抵扣说明:

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

余额充值