Python高级学习笔记-day03-Matplotlib

1 Matplotlib简介

Matplotlib 是 Python 的绘图库, 是一个非常强大的 Python 画图工具,我们可以使用该工具将很多数据通过图表的形式更直观的呈现出来。

Pyplot 是 Matplotlib 的子模块,提供了和 MATLAB 类似的绘图 API。Pyplot 是常用的绘图模块,能很方便让用户绘制 2D 图表。

2 pypolt

2.1 绘制图像

2.1.1 线图

Pyplot中用于绘制线图的函数是plot,它可以绘制单条线,也可以绘制多条线。

plt.plot(x, y, fmt, **kwargs)
参数:x/y:x/y轴坐标,可以是列表或数组,如果仅提供一个参数,则默认该参数为y值,x值默认为y值的索引(从0开始)
      fmt:可选字符串参数,用于定义图形的颜色和样式,如"r-" "b--"
      kwargs:可以传递任意数量的关键字参数,设置图像的样式、属性
          linewidth或lw:线宽
          linestyle或ls:线的样式,-,--
          color或c:线的颜色
          marker:标记样式,如'o' 's'
          markersize或ms:标记的大小
          markeredgecolor:标记边缘的颜色
          markeredgewidth:标记边缘的宽度
          markerfacecolor:标记内部的颜色
          label:图例的标签(必须和plt.legend搭配进行显示)
          alpha:透明度,取值0.0-1.0
              alpha=1.0表示图形元素完全不透明。
              alpha=0.0表示图形元素完全透明
返回值:Line2D 对象的列表,用于进一步操作和定制图形中的线条,例如修改线条的样式、颜色、标签等
          
plt.plot([x1], y1, [fmt], [x2], y2, [fmt2], ..., **kwargs)
可以绘制多条线

plt.show(block)
功能:显示图像,阻塞的操作,后面代码无法执行,当关闭图像时才能继续
参数:block:为True时,函数阻塞,默认值
              为False时,函数不阻塞

import matplotlib.pyplot as plt
import numpy as np

# 绘制图形

# 1.直接绘制
# plt.plot([1, 2, 3], [4, 5, 6])

# 2. x,y分开绘制
x = np.array([1, 2, 3])
y = np.array([1, 4, 9])
# 绘制图形
plt.plot(x, y, "r--o")
# 显示图形
plt.show()

fmt的值:

颜色字符

标记字符

线型字符

'b':蓝色

'.':点标记

'-':实线

'g':绿色

'o':圆圈标记

'--':虚线

'r':红色

's':正方形标记

':':点线

'c':青色

'D':菱形标记

'-.':点划线

'y':黄色

'^':上三角标记

 

'k':黑色

'v':下三角标记

 

'w':白色

'<':左三角标记

 

'm':洋红色

'>':右三角标记

 

 

'*':星号标记

 

练习:绘制正弦图

# 绘制正弦图
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 20)
y = np.sin(x)
plt.plot(x, y, "c-.", label='sin')
y = np.cos(x)
plt.plot(x, y, "k--o", label='cos')

# 显示图例
plt.legend()

# 显示图形
plt.show()

2.1.2 散点图

plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs)
参数:x,y:长度相同的数组,输入的数据点。
      s:点的大小,默认 20,也可以是个数组,数组每个参数为对应点的大小
      c:散点的颜色。可以是单个颜色,也可以是数组,为每个点指定颜色。如果提供了cmap参数,则c可以是颜色映射的值
      marker:点的样式,默认小圆圈 'o'。
      cmap:Colormap,用于将c中的数值映射到颜色图。
      norm: 用于标准化c的颜色数据的 Normalize 对象,确保数据在指定的范围内映射到颜色映射。
      vmin, vmax: 分别是c中数据的最小值和最大值,用于色彩映射。
      alpha: 透明度,范围从 0(完全透明)到 1(完全不透明)。
      linewidths: 散点边缘的线宽。
      edgecolors: 散点边缘的颜色。

import matplotlib.pyplot as plt
import numpy as np

x = np.random.rand(6)
y = np.random.rand(6)
# 手动指定点的颜色,有多少个值就赋值多少个颜色
color = np.array(['b', 'r', 'y', 'g', 'k','m'])
plt.scatter(x, y, c=color)
plt.show()

cmap:自动进行颜色映射,映射关系是通过颜色图来实现的,颜色图是一个将标量数据映射到颜色的函数。它需要和c参数一起使用,根据c指定的值从颜色图中找到对应的颜色
其值可以选择:
# cividis:从蓝紫色到黄绿色的渐变,对色盲友好,如热力图、等高线图
# viridis:从深紫色到亮黄色的渐变,需要高对比度且美观的场景
# plasma:从深蓝色到亮黄色/橙色的渐变,颜色比 viridis 更鲜艳,红色和橙色成分更强,需要强烈视觉冲击的场景
# inferno:从黑色到橙色/黄色的渐变,红色和橙色成分非常强,如温度分布、密度图
# gray:灰度渐变,从黑色(高值)到白色(低值)
# binary:只有两种颜色:黑色(高值)和白色(低值),中间值0.5,超过0.5都是黑色

# 通过颜色图进行映射点的颜色
import matplotlib.pyplot as plt
import numpy as np

x = np.random.rand(30)
y = np.random.rand(30)
# 通过颜色图进行映射点的颜色
plt.scatter(x, y, cmap="viridis")
plt.show()

2.1.3 柱形图

plt.bar(x, height, width=0.8, align='center', data=None, **kwargs)
功能:显示纵向的柱状图
参数:x:x轴
      height:柱状图的高度,相当于y轴的值
      width:柱状图的宽度
      align:柱形图与 x 坐标的对齐方式,'center' 以 x 位置为中心, 'edge'表示柱子在x坐标位置边缘对齐。
      data:用于绘图的数据,可以是DataFrame或类似的结构。当数据存储在DataFrame中时,可以使用此参数直接指定数据源
      kwargs:其他参数,和之前线图一样

import matplotlib.pyplot as plt
import numpy as np

x = np.array(["zs", "ls", "ww", "ml"])
y = np.array([23, 16, 30, 34])

c = np.array(['r', 'b', 'y', 'g'])

# 绘制纵向的柱状图
plt.bar(x, y, color=c)
plt.show()

plt.barh(x, height, height=0.8, align='center', data=None, **kwargs) 
功能:显示横向的柱状图
参数:x:相当于y轴
      第一个height:柱状图的长度
      第二个height:柱状图的宽度

import matplotlib.pyplot as plt
import numpy as np

x = np.array(["zs", "ls", "ww", "ml"])
y = np.array([23, 16, 30, 34])

c = np.array(['r', 'b', 'y', 'g'])
# 绘制横向的柱状图,柱子的宽度设为0.3
plt.barh(x, y, height=0.3)
plt.show()

2.1.4 饼图

plt.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)[source]
参数:x:浮点型数组或列表,用于绘制饼图的数据,表示每个扇形的面积。
      explode:数组,表示该扇区从饼图中心偏移的距离,默认值为0。
      labels:列表,各个扇形的标签。
      colors:数组,表示各个扇形的颜色,默认值为 None。
      autopct:设置饼图内各个扇形百分比显示格式,%d%% 整数百分比,%0.1f 一位小数,%0.1f%% 一位小数百分比,%0.2f%% 两位小数百分比。

      shadow:布尔值 True 或 False,设置饼图的阴影,默认为 False,不设置阴影。
      radius:设置饼图的半径,默认为 1。
      startangle:用于指定饼图的起始角度,默认为从 x 轴正方向逆时针画起,如设定 =90 则从 y 轴正方向画起。
      counterclock:布尔值,用于指定是否逆时针绘制扇形,默认为 True,即逆时针绘制,False 为顺时针。
      wedgeprops:字典类型,默认值 None。用于指定扇形的属性,比如边框线颜色、边框线宽度等。如:wedgeprops={'linewidth':5} 设置线宽为5。
      textprops:字典类型,用于指定文本标签的属性,比如字体大小、字体颜色等,默认值为 None。
      center:浮点类型的列表,用于指定饼图的中心位置,默认值:(0,0)。
      frame:布尔类型,用于指定是否绘制饼图的边框,默认值:False。如果是 True,绘制带有表的轴框架。
      rotatelabels:布尔类型,用于指定是否旋转文本标签,默认为 False。如果为 True,旋转每个 label 到指定的角度。
      data:用于指定数据。不是 plt.pie() 的直接参数,如果你有一个 DataFrame 或其他复杂数据结构,需要先从中提取出适当的数据序列,然后将其传递给 x 参数

import matplotlib.pyplot as plt
import numpy as np

x = np.array([33, 25, 46, 82])

exp = [0, 0, 0, 0.2]  # 从饼图中心偏移的距离,默认值为0

label = ['java', 'c', 'c++', 'python'] # 列表,各个扇形的标签

# 绘制饼图,autopct:显示扇形上的数据格式
plt.pie(x, labels=label, autopct="%0.1f%%", explode=exp)
plt.show()

2.1.5 直方图

可以使用 pyplot 中的 hist() 方法来绘制直方图,这是一种显示数据分布情况的图表,例如观察数据的中心趋势、偏态和异常值等。

plt.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, **kwargs)
参数:x:表示要绘制直方图的数据,可以是一个一维数组或列表。
      bins:可选参数,表示直方图柱子个数。默认为10。
      range:可选参数,表示直方图x轴的范围,默认为None          
      density:可选参数,默认为False。如果设置为True,则直方图会被归一化,显示频率密度而不是计数

      weights:可选参数,一个与x同形状的数组,用于给x中的每个元素指定权重。权重用于计算每个箱的值。
      cumulative:可选参数,表示是否绘制累积分布图。默认为False。
      bottom:可选参数,表示直方图的起始高度(y轴的起始值)。默认为None。
      histtype:可选参数,表示直方图的类型,可以是'bar'(标准条形直方图)、'barstacked'(代表堆积直方图)、'step'(代表未填充的线条直方图)、'stepfilled'(代表填充的线条直方图)等。默认为'bar'。
      align:可选参数,表示直方图箱子的对齐方式,可以是'left'、'mid'、'right'。默认为'mid'。
      orientation:可选参数,表示直方图的方向,可以是'vertical'、'horizontal'。默认为'vertical'。
      rwidth:可选参数,表示每个箱的相对宽度(0 到 1 之间)。默认是0.8。
      log:可选参数,默认为False。True表示对y轴使用对数刻度。
      color:可选参数,表示直方图的颜色。
      label:可选参数,表示直方图的标签,便于在 legend 中使用。
      stacked:可选参数,表示是否堆叠不同的直方图。默认为False。
      **kwargs:可选参数,表示其他绘图参数。
      alpha:透明度

import matplotlib.pyplot as plt
import numpy as np

x = np.random.randn(100)
plt.hist(x, 100, range=(-6, 6), density=True)
plt.show()
y = np.array([1, 2, 3, 4, 5, 5, 6, 2, 4, 3, 0, 5])
plt.hist(y, 100, range=(-6, 6))
plt.show()

2.1.6 等高线图

等高线(Contour Line)是一种用于表示二维空间中某一变量(如高度、温度、压力等)在不同位置上的相同值的曲线。它是地理学、气象学、工程学以及数据可视化等领域中常用的工具。
等高线是一条连接具有相同值的点的曲线
matplotlib.pyplot.contour([X, Y,] Z, [levels], **kwargs)
功能:函数用于绘制等高线(非填充的等高线图),即只绘制等高线的轮廓线,而不填充颜色。
参数:X, Y:二维数组,表示网格的横纵坐标。如果没有提供,则默认 X 和 Y 是从 0 开始的整数索引。如果是一维数组,需要扩展为二维网格
     Z:二维数组,表示每个点的值,形状必须与 X 和 Y 的形状一致
     levels:等高线的级别。
        整数:表示等高线的数量,例如 levels=10。
        列表或数组:表示具体的等高线值,例如 levels=[-1, 0, 1]。
    kwargs:
        extend:控制等高线超出范围时的行为,可选值为 'neither'、'both'、'min'、'max'
        
matplotlib.pyplot.contourf([X, Y,] Z, [levels], **kwargs)
功能:函数用于绘制填充的等高线图,即在等高线之间填充颜色

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(1, 10)  # (,9) (1,9) ->(9,9)
y = np.reshape(x, [-1, 1])  # (9,1) ->(9,9)
print(x)
print(y)
# 触发广播机制
z = x * y  # *代表数组相乘,非矩阵相乘,矩阵相乘为@或numpy.dot
print(z)
# # 绘制等高线图,x,y没有指定默认从0开始,level指定列表,表示等高线的值
# plt.contour(z, levels=[5, 10, 15])
# plt.show()

# 生成二维网格数据,参数为一维或多维,返回值为二维
x, y = np.meshgrid(x, y)
print(x)
print(y)
plt.contour(x, y, z, levels=[5, 10, 15])
plt.show()

# 绘制等高线图,xy没有指定默认从0开始,level指定列表,表示等高线的值
# plt.contour(z, levels=[5, 10, 15])
# plt.show()
# 设置X和Y的坐标(x和y相同)
# plt.contour(x, x, z, levels=[5, 10, 15])
# plt.show()
# 生成二维网格数据有三种方式:
# 方式一:
# x = x * np.array([[1],[1],[1],[1],[1],[1],[1],[1],[1]])
# y = y * np.array([1,1,1,1,1,1,1,1,1])
# 方式二:
# 生成二维网格数据,参数为一维或多维,返回值为二维网格
# x, y = np.meshgrid(x, y)
# 方式三:
# x = np.resize(x, [9,9])
# print(x)
# y = np.resize(y, [9,9]).T
# print(y)
# plt.contour(x, y, z, levels=[5, 10, 15])
# plt.show()

# """resize的复制"""
# import numpy as np
#
# arr = np.array([[1, 2, 3], [4, 5, 6]])
# brr = np.resize(arr, [4, 3])
# print(brr)
# # [[1 2 3]
# #  [4 5 6]
# #  [1 2 3]
# #  [4 5 6]]

补充:numpy.meshgrid 的主要作用是将一维或多维数组转换为多维网格的坐标矩阵。具体来说,它接受多个数组作为输入,返回一组多维网格数组

numpy.meshgrid(*xi, copy=True, sparse=False, indexing='xy')

参数:*xi:一维或多维数组,表示网格的坐标轴。可以有多个输入数组,每个数组对应一个维度。

2.2 设置图像属性

plt.title(title, fontsize=size, fontweight='bold', ...)
功能:设置图像的标题。

plt.xlabel(xlabel, fontsize=size, ...)
功能:设置x轴的标签。

plt.ylabel(ylabel, fontsize=size, ...)
功能:设置y轴的标签。

plt.legend(loc='upper right', fontsize=size, ...)
功能:添加图例,

参数:loc参数指定图例的位置,此函数需要在绘图的函数参数label指定字符串时才能生效,其值可以是:
      'upper right'(默认值): 图例放置在图表的右上角。
      'upper left': 图例放置在图表的左上角
      'lower left': 图例放置在图表的左下角。
      'lower right': 图例放置在图表的右下角
      
plt.subplot(nrows, ncols, index, **kwargs)
功能:绘制多个子图,绘制时需要指定位置

参数:nrows:子图的行数。
      ncols:子图的列数。
      index:当前子图的位置编号。从左到右、从上到下按 1 开始编号。也可以使用三位数表示法(如 234),其中百位数表示行数,十位数表示列数,个位数表示子图编号(从1开始)。
      **kwargs:其他关键字参数,例如 projection='3d' 用于创建三维子图。
       
plt.tight_layout()
功能: 自动调整子图间距

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 20)
y = np.sin(x)
# 添加子图 2行1列编号为1
plt.subplot(2, 1, 1)
plt.plot(x, y, label='sin')
plt.legend()
# 添加x轴y轴文本
plt.xlabel('x')
plt.ylabel('y')
plt.title("sin")


y = np.cos(x)
# 添加子图 2行1列编号为2
plt.subplot(2, 1, 2)
plt.plot(x, y, label='cos')
plt.legend()

plt.title("cos")
# 添加x轴y轴文本
plt.xlabel('x')
plt.ylabel('y')
# 自动调整子图间距
plt.tight_layout()
plt.show()

#----# 添加子图plt.subplot(2, 1, 1)后面的代码只对子图进行修改,所以修改条件写两个

3 Figure对象

在Matplotlib中,Figure对象用于表示整个图形窗口,包括所有的子图(Axes)、标题、图例等。
其中子图Axes是进行数据绘制和设置坐标轴等操作的核心区域,它与Figure对象密切相关,共同构建了完整的绘图体系;其中Figure相当于是一个画框,axes相当于是画板上的一个子图。

3.1 Figure对象的创建

对象的创建有两种方式:
隐式创建:当直接调用绘图函数(plot、bar、hit等)而没有预先创建Figure对象时,Matplotlib会自动隐式创建一个Figure对象和Axes对象。
显式创建:有两种方式:
                        使用pyplot模块中的figure函数(重点)
                        使用figure模块中的Figure类

plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=Figure, clear=False, **kwargs)
功能:用于创建一个新的图形窗口或激活一个已有的图形窗口
参数:num (int 或 str, 可选):图形的编号或名称。果为 None 或省略,则创建一个新的图形窗口,并为其分配一个自动增加的编号。如果为整数,则尝试重用具有该编号的图形窗口。如果为字符串,则尝试重用具有该名称的图形窗口。
      figsize (tuple):图形的宽度和高度(单位为英寸)
      dpi (int):图形的分辨率(每英寸点数)。
      facecolor :图形的背景颜色。

      edgecolor :图形的边框颜色。不常用效果不明显
      frameon (bool):是否显示图形的边框。默认为 True。
      FigureClass (type):用于创建图形的类。默认为 matplotlib.figure.Figure。通常不需要更改此参数。
      clear (bool):如果为 True,则清除当前图形的内容(如果存在)。默认为 False。
      *kwargs**:其他关键字参数将传递给 Figure 类的构造函数。这允许你设置 Figure 对象的其他属性,如 tight_layout、constrained_layout 等。
返回值: Figure 对象,代表创建的图形窗口

import matplotlib.pyplot as plt
import numpy as np

# 创建figure对象
fig = plt.figure(num=1, dpi=100, facecolor="g", clear=True)

x = np.linspace(0, 2 * np.pi, 200)
y = np.sin(x)
plt.plot(x, y)

plt.show()

# fig1 = plt.figure(num=2, figsize=(6, 6)) # 建立一个空白的,宽高自定义的
plt.show()

3.2 Figure类中常用函数

3.2.1 add_subplot

fig.add_subplot(nrows, ncols, index, **kwargs)
功能:在figure中添加子图
参数:nrows: 子图的行数。
      ncols: 子图的列数。
      index: 子图的位置索引(从1开始,按行优先顺序编号)。
返回值:Axes对象

3.2.2 suptitle

fig.suptitle(t, **kwargs)

功能:在figure图形上添加一个中心对齐的标题,位于所有子图的顶部

参数:t:字符串

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()

# 添加子图
fig.add_subplot(1, 2, 1)
x = np.arange(0, 2 * np.pi, 0.1)
y = np.sin(x)
plt.plot(x, y)

fig.add_subplot(1, 2, 2)
x = np.arange(0, 2 * np.pi, 0.1)
y = np.cos(x)
plt.plot(x, y)

# 添加标题 fontsize:字体大小 color:字体颜色
fig.suptitle("sin&cos", fontsize=15, color='m')
plt.show()

3.2.3 add_axes

fig.add_axes(rect, **kwargs)

功能:在figure中任意位置添加一个自定义大小的子图

参数:rect:位置和尺寸,格式通常为 [left, bottom, width, height],值在0到1之间,表示相对于图形尺寸的比例。

left:距figure左边界的比例 bottom:底部边界的比例

width:宽 height:高

**kwargs: 传递给Axes构造函数的额外参数。

返回值:Axes对象

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()

fig.add_axes([0.3, 0.5, 0.5, 0.4])
x = np.arange(0, 2 * np.pi, 0.1)
y = np.sin(x)
plt.plot(x, y)
plt.show()

3.2.4 subplots_adjust

该函数允许用户手动调整子图之间的空间,以及子图与图形边缘之间的空间。这个方法提供了比 `tight_layout` 更精细的控制,特别适用于需要精确控制布局的情况。

fig.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
参数:left: 子图区域左边缘位置占图形的比例,范围从 0 到 1。
    bottom:子图区域下边缘 位置占图形的比例,范围从 0 到 1。
     right:子图区域右边缘位置占图形的比例,范围从 0 到 1。
     top:子图区域上边缘位置占图形的比例,范围从 0 到 1。
  wspace:子图之间的水平间距,(单位:子图宽度的比例)。
  hspace:子图之间的垂直间距,(单位:子图高度的比例)。

1.边界限制:
left 和 right 的值必须满足 left < right。
bottom 和 top 的值必须满足 bottom < top。
如果设置的间距过大,可能会导致子图之间重叠或超出图形边界。
2. 默认值:
如果不设置某些参数,Matplotlib 会使用默认值。默认情况下,left=0.125,right=0.9,top=0.88,bottom=0.11,wspace=0.2,hspace=0.2

区别:

add_axes:对单个子图进行大小和位置的调整

subplots_adjust:修改子图的间距和位置(整体进行操作)

# 自定义子图的位置边界限制
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()

fig.add_subplot(1, 2, 1)
x = np.arange(0, 2 * np.pi, 0.1)
y = np.sin(x)
plt.plot(x, y)

fig.add_subplot(1, 2, 2)
x = np.arange(0, 2 * np.pi, 0.1)
y = np.cos(x)
plt.plot(x, y)
# 手动调整子图位置和间距
# fig.subplots_adjust(left(左), bottom=(下) ,right=(右) , top=(上) , wspace=None, hspace=None)
fig.subplots_adjust(0.3, 0.4, 0.7, 0.6, wspace=0.3)
plt.show()

3.2.5 get_size_inches

函数功能为获取图形的大小,以英寸为单位。返回值为获取的大小

3.2.6 set_size_inches

该方法用于设置图形对象的大小,单位为英寸。这个方法允许用户在创建图形后改变其尺寸,从而影响输出图像的大小和显示效果。

fig.set_size_inches(width, height, forward=True)

参数:width, height:浮点数,指定图形的宽度和高度,单位为英寸。

forward:布尔值,默认为True。如果为True,则在调整图形大小时,同时更新所有子图的大小和位置。如果为False,则仅改变图形的大小,而不更新子图。

3.2.7 get_dpi

 fig.get_dpi()

功能:获取图像的DPI

返回值:获得到的DPI值 

3.2.8 set_dpi

该方法用于设置图形对象的DPI,DPI是每英寸的点数(Dots Per Inch, DPI)。这个方法影响输出图像的质量和文件大小,通常与 `set_size_inches` 方法配合使用来精确控制图形的尺寸和输出质量.

图像在未设置DPI时,DPI的值默认为100

3.2.9 clear

在matplotlib的Figure类和Axes类中都含有clear函数,Axes对象主要用于清除该子图上的所有元素(包括线条、标记、文本、图像等),Figure对象是将清除整个图像的所有子图和其他相关的元素

3.3 Axes类中的常用函数

set_xlim(left, right):设置 x 轴的范围。
set_ylim(bottom, top):设置 y 轴的范围。

set_xlabel(label):设置 x 轴的标签。
set_ylabel(label):设置 y 轴的标签。

set_title(label):设置子图的标题。

ax.grid(True)  # 显示网格线,便于观察位置

Axes.text(x, y, s, **kwargs)
参数:x\y:文字的坐标
      s:设置的文本内容
      kwargs:其他可选的关键字参数,用于控制文本的样式,如 
          fontsize(字体大小)、
          color(颜色)、
          horizontalalignment(水平对齐方式,如 ‘left’, ‘center’, ‘right’)、
          verticalalignment(垂直对齐方式,如 ‘top’, ‘center’, ‘bottom’)等。

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(1, 2, 1)

# 设置x轴y轴的范围
ax.set_xlim(-4, 4)
ax.set_ylim(-6, 6)
# 设置x轴y轴的标签
ax.set_xlabel('x')
ax.set_ylabel('y')
# 设置子图标题
ax.set_title('line')
# 定义了一条线段,x区间,y区间
ax.plot([1, 2], [3, 4])
# 设置文本
ax.text(2, 3, 'y=x+1')

plt.show()

4 绘制子图的方式

4.1 pyplot中函数subplot绘制子图,返回值为子图对象

import numpy as np
import matplotlib.pyplot as plt

# 创建数据
x = np.linspace(0, 2 * np.pi, 100)  # 创建一个从0到2π(一个完整的圆周周期),包含100个点的数组
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)  # 正切函数值(在π/2和3π/2处有间断)

# 使用 plt.subplot() 创建子图
plt.figure(figsize=(10, 6))  # 创建图形窗口,大小为10英寸宽×6英寸高

# 第一个子图 (2行2列中的第1个)
plt.subplot(2, 2, 1)  # plt.subplot(nrows, ncols, index) 参数:行数, 列数, 位置索引
plt.plot(x, y1, 'b-')  # 绘制x和y1的曲线,蓝色(b)实线(-)
plt.title('sin(x)')  # 设置当前子图的标题
plt.grid(True)  # 在当前子图中显示网格线

# 第二个子图 (2行2列中的第2个)
plt.subplot(2, 2, 2)
plt.plot(x, y2, 'r--')  # 红色(r)虚线(--)
plt.title('cos(x)')
plt.grid(True)

# 第三个子图 (2行2列中的第3个)
plt.subplot(2, 2, 3)
plt.plot(x, y3, 'g-.')  # 绿色(g)点划线(-.)
plt.title('tan(x)')
plt.grid(True)
plt.ylim(-5, 5)  # 限制y轴范围
# 设置y轴显示范围为-5到5,正切函数在π/2和3π/2处趋向无穷大,需要限制范围才能正常显示

# 第四个子图 (2行2列中的第4个)
plt.subplot(2, 2, 4)
plt.plot(x, y1, 'b-', label='sin(x)')
plt.plot(x, y2, 'r--', label='cos(x)')
plt.plot(x, y3, 'g-.', label='tan(x)')
plt.title('sin&cos&tan')  # 显示图例,
plt.legend()
plt.grid(True)
plt.ylim(-5, 5)

# 调整布局
plt.tight_layout()
# 自动调整子图参数,使子图适配图形区域,避免重叠,
# 这是非常重要的步骤,确保子图标签和标题不会重叠
plt.suptitle('plt.subplot()', fontsize=16)  # 为整个图形添加总标题
plt.show()

4.2 Figure类中的函数add_subplot绘制子图,返回值为子图对象

import numpy as np  # 导入NumPy库,用于数值计算和数组操作
import matplotlib.pyplot as plt  # 导入Matplotlib的pyplot模块,用于数据可视化

# 创建数据
x = np.linspace(0, 2 * np.pi, 100)  # 在0到2π之间创建100个等间距点
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)

# 使用 Figure.add_subplot() 创建子图
fig = plt.figure(figsize=(10, 6))  # 创建Figure对象,大小为10英寸宽×6英寸高
fig.suptitle('Figure.add_subplot() ', fontsize=16)  # 设置整个图形的标题,字体大小为16

# 创建第一个子图 (2行2列中的第1个)
ax1 = fig.add_subplot(2, 2, 1)  # 参数:行数, 列数, 位置索引
ax1.plot(x, y1, 'b-')
ax1.set_title('sin(x)')
ax1.grid(True)

# 创建第二个子图 (2行2列中的第2个)
ax2 = fig.add_subplot(2, 2, 2)
ax2.plot(x, y2, 'r--')
ax2.set_title('cos(x)')
ax2.grid(True)

# 创建第三个子图 (2行2列中的第3个)
ax3 = fig.add_subplot(2, 2, 3)
ax3.plot(x, y3, 'g-.')
ax3.set_title('tan(x)')
ax3.grid(True)
ax3.set_ylim(-5, 5)

# 创建第四个子图 (2行2列中的第4个)
ax4 = fig.add_subplot(2, 2, 4)
ax4.plot(x, y1, 'b-', label='sin(x)')
ax4.plot(x, y2, 'r--', label='cos(x)')
ax4.plot(x, y3, 'g-.', label='tan(x)')
ax4.set_title('sin&cos&tan')
ax4.legend()
ax4.grid(True)
ax4.set_ylim(-5, 5)

# 调整布局
plt.tight_layout()
plt.subplots_adjust(top=0.9)  # 为总标题留出空间
plt.show()

4.3 pyplot中函数subplots绘制子图,返回值为Figure对象和子图对象数组

fig, ax = plt.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
功能:绘制多个子图,可以一次生成多个

参数:nrows和ncols:整数,表示子图的行数和列数。
      sharex和sharey:布尔值或字符串,表示是否共享x轴或y轴的属性。 可选值有True、False、'row'和'col'。
      squeeze:布尔值,默认为True。当子图只有一个时,返回一个Axes对象而不是一个数组。False时返回一个二维数组
      width_ratios:列宽比例的序列,用于调整各列的宽度比
      height_ratios:行高比例的序列,用于调整各行的高度比
      subplot_kw:字典类型,可选参数。把字典的关键字传递给add_subplot()来创建每个子图。
      gridspec_kw:字典类型,可选参数。把字典的关键字传递给GridSpec构造函数创建子图放在网格里(grid)。
      **fig_kw:把所有详细的关键字参数传给figure()函数。
返回值:fig:这是整个图形的对象,可以对其进行全局设置,如标题、大小等。
        axes:这是一个数组,包含所有的子图。数组的形状由nrows和ncols决定。例如,如果 nrows=2 和 ncols=3,则 axes 将是一个 2x3 的数组,每个元素都是一个子图对象。

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots(2, 2)
print(ax)
#[[<Axes: > <Axes: >]
# [<Axes: > <Axes: >]]

ax[0, 0].plot([2, 3], [4, 5])  # 对第一个进行操作

ax[0, 1].plot([1, 2], [4, 4])  # 对第二个进行操作

ax[1, 0].plot([1, 1], [2, 1])  # 对第三个进行操作

fig.suptitle('sub')

plt.show()

5 pyplot中常用函数

5.1 plt.gcf()

Get Current Figure 的缩写,功能:获取当前窗口的Figure对象,如果没有活动的图形,这个函数将创建一个新的图形,并将其作为当前活动的图形。通过此函数获取了当前图形的Figure对象后,可以调用Figure类中的相关操作

import matplotlib.pyplot as plt

# 创建一个Figure(隐式调用plt.gcf())
plt.plot([1, 2, 3], [4, 5, 6])

# 获取当前Figure对象
fig = plt.gcf()

# 修改Figure属性
fig.set_size_inches(8, 6)       # 设置画布大小
fig.suptitle("Global Title")    # 设置全局标题

plt.show()

5.2 plt.gca()

Get Current Axes 的缩写,获取当前图形中的Axes对象(坐标系)
如果不存在当前Axes,会自动创建一个新的

import matplotlib.pyplot as plt

# 创建一个Axes(隐式调用plt.gca())
plt.plot([1, 2, 3], [4, 5, 6])

# 获取当前Axes对象
ax = plt.gca()

# 修改Axes属性
ax.set_xlabel("X Axis")  # 设置X轴标签
ax.set_ylim(0, 10)  # 设置Y轴范围
ax.grid(True)  # 显示网格
plt.show()

函数

作用对象

层级关系

典型用途

gcf()

Figure

顶层容器(画布)

全局画布设置、多图管理

gca()

Axes

子容器(坐标系)

坐标轴细节调整、数据系列操作

组合使用示例:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 2 * np.pi, 0.1)
y = np.cos(x)
plt.plot(x, y, label='cos')
plt.legend()

# 获取Figure对象
fig = plt.gcf()
fig.suptitle('cos')

# 获取Axes对象
ax = plt.gca()
ax.set_xlabel('x')

plt.show()

5.3 savefig

matplotlib.pyplot 模块中的 savefig 函数用于将当前图形保存到文件中

plt.savefig(*args, **kwargs)
参数:fname:字符串或类似文件的对象,指定保存文件的路径或文件名。可以是相对路径或绝对路径。如果文件扩展名缺失,将使用默认格式(通常是 PNG)。
      dpi:可选,指定保存图像的dpi(每英寸点数)。默认值是figure.dpi。
      format:可选,指定文件格式(如 'png', 'pdf', 'svg', 'ps', 'eps', ...)。如果省略,将使用文件扩展名推断格式。
      bbox_inches:可选,指定裁剪框,可以是 'tight'、'standard' 或一个 Bbox 对象。默认为 'standard'。tight:保存的图形文件中不会有不必要的空白边缘,使得图形更加紧凑和整洁
      pad_inches:可选,指定边框填充量(以英寸为单位)。默认为 0.1。
      facecolor:可选,指定图像的背景颜色。默认为 'w'(白色)。
      edgecolor:可选,指定图像边框的颜色。默认为 'w'(白色)。
      orientation:可选,指定页面方向('portrait' 或 'landscape'),仅对保存为 PDF 文件时有效。
      papertype:可选,指定纸张类型(如 'a4', 'letter'),仅对保存为 PDF 文件时有效。
      format_kwargs:可选,其他与格式相关的关键字参数。
      metadata:可选,指定要写入文件的元数据。
      pil_kwargs 和 pdf_kwargs:可选,特定于 PIL 或 PDF 格式的参数。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 2 * np.pi, 0.1)
y = np.sin(x)
plt.plot(x, y)

y = np.arange(0, 2 * np.pi, 0.1)
y = np.cos(x)
plt.plot(x, y)
# 添加保存图像的代码
plt.savefig('sin_cos.png')  # 保存为PNG文件
# 拓展
plt.savefig(
    'high_res.png',
    dpi=300,  # 提高分辨率
    bbox_inches='tight',  # 去除多余空白
    transparent=True  # 设置背景透明
)
# 显示图像预览
plt.title('sin&cos')  # 为当前图像设置标题
plt.axis('off')  # 关闭坐标轴
plt.show()

sin_cos.png:

图片保存在本地同文件夹下:

high_res.png:

5.4 imshow

imshow() 函数是 Matplotlib.pyplot 库中的一个函数,它常用于绘制二维的灰度图像或彩色图像,也可以用于绘制矩阵、热力图、地图等。

imshow(X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None, extent=None, shape=None, filternorm=1, filterrad=4.0, imlim=None, resample=None, url=None, *, data=None, **kwargs)
参数:X:图像数据。这通常是一个二维数组(灰度图像)或一个三维数组(彩色图像,其中第三维是颜色通道)。对于二维数组,可以使用 cmap 参数来指定颜色映射
      cmap:颜色映射。用于控制图像中不同数值所对应的颜色。默认颜色是'viridis',也可以设置其他颜色,如`gray`、`hot`、`jet`、'binary'等          
      norm:用于将数据值标准化到 [0, 1] 区间。以便与颜色映射一起使用。如果为 None,则数据将直接用于颜色映射。
      aspect:控制图像宽高比,'auto'(默认,根据数据形状自动调整)、'equal'(使像素为正方形)或数字(指定宽高比)
      interpolation:插值方法。用于控制图像的平滑程度和细节程度。可以选择`nearest`、`bilinear`、`bicubic`等插值方法。
      alpha:图像透明度。取值范围为0~1。
      origin:坐标轴原点的位置。可以设置为`upper`或`lower`。
      extent:控制显示的数据范围。可以设置为`[xmin, xmax, ymin, ymax]`。
      vmin、vmax:控制颜色映射的值域范围。
      filternorm 和 filterrad:用于图像滤波的对象。可以设置为`None`、`antigrain`、`freetype`等。
      imlim: 用于指定图像显示范围。
      resample:用于指定图像重采样方式。
      url:用于指定图像链接。
      

plt.colorbar()
功能:显示颜色柱

import numpy as np
import matplotlib.pyplot as plt

# # 二维
arr = np.array([[1, 2, 1, 2], [2, 1, 2, 3]])
# cmap:颜色映射。用于控制图像中不同数值所对应的颜色。
plt.imshow(arr, cmap='gray')
plt.show()

brr = np.array([[1, 2, 1], [2, 1, 2]])
# cmap:颜色映射。用于控制图像中不同数值所对应的颜色。
plt.imshow(brr, cmap='cividis')
plt.show()

5.5 imsave

用于将图像数据保存到磁盘上的函数
matplotlib.pyplot.imsave(fname, arr, **kwargs)
参数:fname:指定保存的文件路径和名称,可以是相对路径或绝对路径。
      arr:表示图像的NumPy数组。

arr: 数组,包含图像数据
二维数组:灰度图像
三维数组(形状为M×N×3):RGB彩色图像
三维数组(形状为M×N×4):RGBA图像(带透明度)

cmap: 颜色映射,用于将标量值映射到颜色
仅适用于二维数组(灰度图像)对于彩色图像(三维数组),不需要指定cmap参数

常用选项:'gray', 'viridis', 'jet', 'hot', 'cool'等
vmin, vmax: 设置数据范围,用于颜色映射
origin: 设置原点位置('upper'或'lower')
dpi: 设置图像分辨率(每英寸点数)

imsave和savefig区别:
savefig可以将绘制的图像保存成文件,包含坐标、标题、图例等
imsave是将二维或三维数据保存成图像文件,不含坐标等,它没法直接保存plot等绘制的图像

import numpy as np
import matplotlib.pyplot as plt

arr = np.array([[1, 2, 3, 1], [2, 3, 1, 2]])
# 绘制二维或三维数据图像,通过cmap进行颜色映射
plt.imshow(arr, cmap='gray')
plt.imsave('./test.png', arr)
plt.show()

存放位置:

5.6 imread

imread() 方法是 Matplotlib 库中的一个函数,用于从图像文件中读取图像数据。
imread() 方法返回一个 numpy.ndarray 对象其形状是 (nrows, ncols, nchannels),表示读取的图像的行数、列数和通道数:
1.如果图像是灰度图像,则 nchannels 为 1。
2.如果是彩色图像,则 nchannels 为 3 或 4,分别表示红、绿、蓝三个颜色通道和一个 alpha 通道;为3时表示红绿蓝,为4时表示红绿蓝、透明度

matplotlib.pyplot.imread(fname, format=None)
参数:fname:指定了要读取的图像文件的文件名或文件路径,可以是相对路径或绝对路径。
      format:参数指定了图像文件的格式,如果不指定,则默认根据文件后缀名来自动识别格式。
返回值:numpy.ndarray 对象

a = plt.imread('sin_cos.png')
功能:从文件读取图像数据
参数:图像文件路径(此处为当前目录下的 sin_cos.png 文件)
返回值:返回一个 NumPy 数组,包含图像的像素数据

数组维度取决于图像类型:
灰度图像:二维数组 (height, width)
RGB 彩色图像:三维数组 (height, width, 3)
RGBA 带透明度图像:三维数组 (height, width, 4)

plt.imshow(a)
功能:将图像数据渲染为可视化图像

参数:NumPy 数组形式的图像数据

工作原理:
根据数组维度确定图像类型(灰度/RGB/RGBA)

将数值映射到颜色空间:
uint8:0 → 黑色,255 → 白色
float:0.0 → 黑色,1.0 → 白色
在当前的 Matplotlib 图形窗口创建图像对象

额外功能:
自动调整坐标轴比例(1:1 像素比例)
支持添加标题、坐标轴标签等
可设置插值方式(interpolation 参数)

import numpy as np
import matplotlib.pyplot as plt

# 文件指定了要读取的图像文件的文件名或文件路径,相对路径或本地文件
a = plt.imread('sin_cos.png') # 读取图像文件
plt.imshow(a) # 显示图像数据
plt.show()  # 展示图像窗口


# 文件路径(使用原始字符串格式,绝对路径)
file_path = r'C:\Users\27135\Desktop\壁纸\1.jpg'
# 读取图像文件
arr = plt.imread(file_path)
# 打印图像信息
print("图像加载成功!")
print("图像形状 (高度, 宽度, 通道数):", arr.shape)
print("数据类型:", arr.dtype)
print("像素值范围: [{}, {}]".format(arr.min(), arr.max()))
# 显示图像预览
plt.imshow(arr)
plt.title('Image Preview')
plt.axis('off')  # 关闭坐标轴
plt.show()

#----图像加载成功!
#----图像形状 (高度, 宽度, 通道数): (480, 640, 4)
#----数据类型: float32
#----像素值范围: [0.0, 1.0]

本地文件查询到的:

绝对路径查询到的:代码下面注释为绝对路径图片的信息

imread 和 imshow 配合使用形成了完整的图像处理流程:

1.数据获取阶段(imread)
从存储介质读取原始二进制图像数据
解码为计算机可处理的数值数组
保留完整的图像信息(尺寸、颜色通道等)

2.可视化阶段(imshow)
将数值数组映射到可视颜色空间
创建图像对象并添加到画布
处理坐标轴、色彩映射等可视化细节

3.展示阶段(show)
渲染最终结果
提供用户交互界面

# 1. 读取
image_data = plt.imread('image.jpg')

# 2. 显示
plt.imshow(image_data)

# 3. 展示
plt.show()

5.7 close

plt.close(fig=None)
功能:该函数用于关闭一个或多个打开的图形窗口,释放资源
参数:fig:指定要关闭的图形,可以是Figure对象,也可以是图形对应的整数

        fig=None:
                当参数为空时:关闭当前活动图形窗口
                当参数为整数时:关闭指定编号的图形窗口
                当参数为Figure对象时:关闭指定的图形对象
                当参数为字符串'all'时:关闭所有图形窗口

            all:关闭所有图形,如果参数省略,关闭当前图像

import numpy as np  # 导入NumPy库,用于数值计算
import matplotlib.pyplot as plt  # 导入Matplotlib的pyplot模块,用于数据可视化

# 示例1:关闭当前图形窗口
print("\n示例1:关闭当前图形窗口")

# 创建第一个图形窗口
plt.figure(1)  # 创建编号为1的图形窗口
plt.plot([1, 2, 3], [1, 4, 9], 'ro-')  # 绘制红色点线图
plt.title('图形1')  # 设置标题
plt.show(block=False)  # 显示图形但不阻塞程序执行
print("显示图形1后,活动窗口数量:", len(plt.get_fignums()))  # 获取当前打开的图形窗口数量

# 关闭当前图形窗口(即图形1)
plt.close()  # 无参数调用,关闭当前活动图形窗口
print("关闭当前图形后,活动窗口数量:", len(plt.get_fignums()))

# 添加短暂暂停,确保图形关闭可见
plt.pause(5)  # 暂停1秒
#出现1秒后,关闭

5.8 Line2D类函数

plt.plot函数的返回值表示包含一个或多个 Line2D 对象(有多条线时会返回多个Line2D对象)
Line2D 是 Matplotlib 中用于表示二维线条的类。通过返回 Line2D 对象,你可以访问和修改线条的各种属性,例如颜色、线型、标签等。这使得 plt.plot() 不仅仅是绘制图形,还可以让你对绘制的线条进行进一步的定get_制。

5.8.1 get_label

该方法用于获取图形元素(如线条、散点、文本等)的标签(label)值;
通常用于识别或操作特定图形元素;
标签在创建图例(legend)时特别有用;
这个方法通常用于获取已经设置好的标签,以便于后续的检查或修改。

import numpy as np
import matplotlib.pyplot as plt

# 创建图形
fig, ax = plt.subplots()
x = np.linspace(0, 10, 100)

# 绘制一条线并设置标签
line1, = ax.plot(x, np.sin(x), label='sin')

# 使用 get_label() 获取标签
print("Line1 标签:", line1.get_label())  # 输出: 正弦

# 根据标签修改线条属性
if line1.get_label() == 'sin':
    line1.set_linewidth(3)
    line1.set_color('red')

# 添加图例
ax.legend()
plt.show()

5.8.2 set_data

该函数功能用于动态更新线条的 x 和 y 数据
避免重新绘制整个图形,提高动画效率
主要用于实时更新图形(如传感器数据可视化)

import numpy as np  # 导入NumPy库,用于数值计算
import matplotlib.pyplot as plt  # 导入Matplotlib的pyplot模块,用于数据可视化
x = np.arange(0, 2*np.pi, 0.1)
y = np.sin(x)
ld, = plt.plot(x, y, label='sin')

y = np.cos(x)
# 根据指定的时间暂停程序
plt.pause(5)
# 修改原图像的数据
ld.set_data(x, y)

plt.show()

 sinx经过5秒后变为cosx

5.9 pause

用于在绘图时暂停程序执行,并在指定的时间间隔后继续执行。它常用于动态更新图形或创建简单的动画效果。

函数的作用:
暂停程序:plt.pause(interval) 会暂停程序的执行,暂停的时间由参数 interval(单位为秒)决定。
刷新图形窗口:在暂停期间,plt.pause() 会强制刷新图形窗口,显示最新的图形内容。这使得它特别适合用于动态更新图形的场景。

x = np.arange(0, 2*np.pi, 0.1)
y = np.sin(x)
ld, = plt.plot(x, y, label='sin')

# 获取图像中label数据
# ret = ld.get_label()
# print(ret)

y = np.cos(x)
# 根据指定的时间暂停程序
plt.pause(5)
# 修改原图像的数据
ld.set_data(x, y)

plt.show()

#----效果同上

6 绘制子网网格

使用模块gridspec中的函数GridSpec绘制
在 Matplotlib 中,GridSpec 对象提供了一种灵活的方式来创建子图网格(subplots grid),允许子图跨越多个行和列,以及具有不均匀的行高和列宽。

from matplotlib.gridspec import GridSpec

GridSpec(nrows, ncols, figure=None, left=None, right=None, bottom=None, top=None, wspace=None, hspace=None, width_ratios=None, height_ratios=None, w_pad=None, h_pad=None)
参数:
nrows: int子图网格的行数。
      ncols: int子图网格的列数。

      figure: matplotlib.figure.Figure, 
                optional, 
                default: None
                指定的图形对象。如果未提供,则默认创建一个新的图形对象。

      left: float, optional, default: None子图网格左侧的相对位置(0 到 1 的比例)。如果未指定,则使用默认的左边界。
      right: float, optional, default: None子图网格右侧的相对位置(0 到 1 的比例)。如果未指定,则使用默认的右边界。
      bottom: float, optional, default: None子图网格底部的相对位置(0 到 1 的比例)。如果未指定,则使用默认的底边界。
      top: float, optional, default: None子图网格顶部的相对位置(0 到 1 的比例)。如果未指定,则使用默认的顶边界。
      wspace: float or None, optional, default: None子图之间的水平间距(以英寸为单位)或作为子图宽度的比例。如果未指定,则使用默认的间距。
      hspace: float or None, optional, default: None子图之间的垂直间距(以英寸为单位)或作为子图高度的比例。如果未指定,则使用默认的间距。
      width_ratios: list of floats, optional, default: None
指定每一列的宽度比例。如果指定,则 ncols 必须与列表长度匹配。
      height_ratios: list of floats, optional, default: None
指定每一行的高度比例。如果指定,则 nrows 必须与列表长度匹配。
      w_pad: float, optional, default: None子图之间的水平填充(以英寸为单位)。如果未指定,则使用默认的填充。
      h_pad: float, optional, default: None子图之间的垂直填充(以英寸为单位)。如果未指定,则使用默认的填充。

"""绘制子图网格"""
# 使用模块gridspec中的函数GridSpec绘制
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.gridspec import GridSpec

fig = plt.figure()

# 添加子图网格
gs = GridSpec(2, 3)

# 在第一行添加三个子图
ax = fig.add_subplot(gs[0, 0])
plt.xlabel('x')
ax.plot([2, 3], [4, 5])  # 对第一个进行操作

fig.add_subplot(gs[0, 1])

fig.add_subplot(gs[0, 2])
# 在第二行添加一个子图
fig.add_subplot(gs[1, :])

plt.show()

补充:

# 设置字体类型能支持中文的字体
plt.rcParams['font.sans-serif'] = ['SimHei']
# 设置显示负数异常
plt.rcParams['axes.unicode_minus'] = False 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值