Python——Matplotlib绘图库

文章目录

Matplotlib介绍与安装

Matplotlib 是 Python 的一个绘图库,它提供了一个类似于 MATLAB 的绘图系统。Matplotlib 是 Python 数据可视化领域的核心库之一,通过它,用户可以创建出版质量级别的图形图表。

  • Matplotlib 的主要功能

    • 二维图形的绘制:支持绘制线图、散点图、柱状图、饼图、箱型图、误差线图、热力图、等高线图等几乎所有常见的二维图形。
    • 三维图形的绘制:通过 Matplotlib 的子库 mpl_toolkits.mplot3d,用户可以绘制三维图形,如三维曲面图、三维散点图等。
    • 图形的定制:提供丰富的API,允许用户对图形的各种元素(如线条、标记、字体、图例、坐标轴等)进行精细定制。
    • 交互式图形:通过结合 IPython、Jupyter Notebook 或其他交互式环境,用户可以实时查看并修改图形的参数。
    • 图形的保存:支持将图形保存为多种格式的文件,如 PNG、PDF、SVG 等。
  • 安装matplotlib

    python 复制代码
    pip install matplotlib
  • 导入

    python 复制代码
    import matplotlib.pyplot as plt

Matplotlib 的默认配置都允许用户自定义。你可以调整大多数的默认配置:图片大小和分辨率(dpi)、线宽、颜色、风格、坐标轴、坐标轴以及网格的属性、文字与字体属性等。不过,matplotlib 的默认配置在大多数情况下已经做得足够好,你可能只在很少的情况下才会想更改这些默认配置。

  • 图表的构成

基本绘图流程

  • 1.创建画布与创建子图

第一部分主要作用是构建出一张空白的画布,并可以选择是否将整个画布划分为多个部分,方便在同一幅图上绘制多个图形的情况。最简单的绘图可以省 略第一部分,而后直接在默认的画布上进行图形绘制。

函数名称 函数作用
plt.figure 创建一个空白画布,可以指定画布大小,像素。
figure.add_subplot 创建并选中子图,可以指定子图的行数,列数,与选中图片编号。
  • plt.figure方法绘图

    python 复制代码
    import numpy as np
    import matplotlib.pyplot as plt
    # 创建画布
    figure = plt.figure()
    # 设置图表大小
    plt.rcParams['figure.figsize'] = (8,6)
    # 创建子图
    plt.subplot()
    # 绘制第1张子图:折线图
    ax1 = plt.subplot(221)
    plt.plot([1,2,3],[2,4,6])
    # 绘制第2张子图:柱状图
    ax2 = plt.subplot(222)
    plt.bar([1,2,3],[2,4,6])
    # 绘制第3张子图:散点图
    ax3 = plt.subplot(223)
    plt.scatter([1,3,5],[2,4,6])
    # 绘制第4张子图:直方图
    ax4 = plt.subplot(224)
    plt.hist([2,2,2,3,4])
    # 显示绘图
    plt.show()
  • figure.add_subplot方法绘图

    python 复制代码
    # 创建子图
    fig, axes = plt.subplots(nrows=2,ncols=2,figsize=(10,8))
    ax1,ax2,ax3,ax4 = axes.flatten()
    # nrows表示行数,ncols表示列数,可以简写为 plt.subplots(2,2),figsize参数设置图表尺寸为1000×800像素。
    ax1.plot([1,2,3],[2,4,6]) # 绘制第一张子图
    ax2.bar([1,2,3],[2,4,6]) # 绘制第二张子图
    ax3.scatter([1,3,5],[2,4,6]) # 绘制第三张子图
    ax4.hist([2,2,2,3,4]) # 绘制第四张子图
    # 显示绘图
    plt.show()
  • 2.添加画布内容

第二部分是绘图的主体部分。其中添加标题,坐标轴名称,绘制图形等步骤是并列的,没有先后顺序,可以先绘制图形,也可以先添加各类标签。但是添加图例一定要在绘制图形之后。

函数名称 函数作用
plt.title 在当前图形中添加标题,可以指定标题的名称、位置、颜色、字体 大小等参数。
plt.xlabel 在当前图形中添加x轴名称,可以指定位置、颜色、字体大小等参数。
plt.ylabel 在当前图形中添加y轴名称,可以指定位置、颜色、字体大小等参数。
plt.xlim 指定当前图形x轴的范围,只能确定一个数值区间,而无法使用字符 串标识。
plt.ylim 指定当前图形y轴的范围,只能确定一个数值区间,而无法使用字符 串标识。
plt.xticks 指定x轴刻度的数目与取值。
plt.yticks 指定y轴刻度的数目与取值。
plt.legend 指定当前图形的图例,可以指定图例的大小、位置、标签。
  • 3.保存与展示图形
函数名称 函数作用
plt.savefig 保存绘制的图片,可以指定图片的分辨率、边缘的颜色等参数。支持:eps, jpeg, jpg, pdf,pgf, png, ps, raw, rgba, svg, svgz, tif, tiff格式的图片,需要修改保存格式使用plt.rcParams["savefig.format"]设置。
plt.show 在本机显示图形。
  • 4.设置pyplot的动态rc参数
    • pyplot模块使用rc配置文件来自定义图形的各种默认属性,称为rc配置或rc参数。通过修改rc参数可以修改默认的属性,包括窗体大小、每英寸的点数、线条宽度、颜色、样式、坐标轴、坐标和网络属性、文本、字体等。

    • matplotlib将默认参数配置保存在matplotlibrc文件中,通过修改配置文件,可修改图标的的缺省样式。

      • 1.线条常用的rc参数
      rc参数名称 解释 取值
      lines.linewidth 线条宽度 取0-10之间的数值,默认为1.5。
      lines.linestyle 线条样式 可取"-""--""-."" : "四种。 默认为"-" 。
      lines.marker 线条上点的形状 可取"o""D""h""."" , " "S"等20种,默认为None
      lines.markersize 点的大小 取0-10之间的数值,默认为1。
      python 复制代码
      # 修改rc参数
      plt.rcParams['lines.linestyle'] = '-.'
      plt.rcParams['lines.linewidth'] = 3
      • 2.坐标轴常用的rc参数
      rc参数名称 解释 取值
      axes.facecolor 背景颜色 接收颜色简写字符。默认为"W"
      axes.edgecolor 边线颜色 接收颜色简写字符。默认为"k"
      axes.linewidth 轴线宽度 接收0~1的float。默认为0.8
      axes.grid 添加网格 接收bool。默认为False
      axes.titlesize 标题大小 接收'small','medium','large'。默认为'large'
      axes.labelsize 轴标大小 接收'small','medium','large'。默认为'medium'
      axes.lablelcolor 轴标颜色 接收颜色简写字符。默认为"k"
      axes.spines.{left,botton,top,tight} 添加坐标轴 接收bool。默认为True
      axes.{x,y}margin 轴余留 接收float。默认为0.05
      • 3.字体常用的rc参数
      rc参数名称 解释 取值
      font.family 字体族,每一族对应多种字体 接收serif、sans-serif、cursive、fantasy、monospace五种。
      font.style 字体风格 接收normal(roman)、italic、oblique三种,默认为normal
      font.variant 字体变化 接收normal或small-caps。默认为normal
      font.widget 字体重量 接收normal、bold、bolder、lighter四种及100、200、...、900.默认为nomal
      font.stretch 字体延伸
      font.size 字体大小 接收float。默认为10
      • 注意 !!!

        由于默认的pyplot字体并不支持中文字符的显示,因此需要通过设置 font.sans-serif 参数改变绘图时的字体,使得

        图形可以正常显示中文。同时,由于更改字体后,会导致 坐标轴中的部分字符无法显示,因此需要同时更改

        axes.unicode_minus参数。

        python 复制代码
        import matplotlib.pyplot as plt
        # 用来正常显示中文标签,SimHei是黑体的英文名称
        plt.rcParams['font.sans-serif'] = ['SimHei']
        # 解决符号显示为方块的问题
        plt.rcParams['axes.unicode_minus'] = False

基本绘图

  • 1.绘图核心API
python 复制代码
# 绘制简单直线
import numpy as np
import matplotlib.pyplot as plt
# 绘制简单直线
x = np.array([1, 2, 3, 4, 5])
y = np.array([3, 6, 9, 12, 15])
# 绘制水平线、垂线
plt.axhline(y=6, ls=":", c="blue") # 添加水平直线
plt.axvline(x=4, ls="-", c="red") # 添加垂直直线
# 绘制多段垂线
plt.vlines([2, 3, 3.5], # 垂线的x坐标值
[10, 20, 30], # 每条垂线起始y坐标
[25, 35, 45]) # 每条垂线结束y坐标
plt.figure()
plt.plot(x, y)
plt.savefig('./test2.jpg') # 保存图片
plt.show() # 显示图片,阻塞方法
  • 2.设置线型、线宽

    linestyle : 设置线型,常见取值有实线('-')、虚线('--')、点虚线('-.')、点线(':')
    linewidth :线宽
    color :颜色(red, blue, green)
    alpha: 设置透明度(0~1之间)

    • 格式化字符
    字符 描述
    '-' 实线样式
    '--' 短横线样式
    '-.' 点划线样式
    ':' 虚线样式
    '.' 点标记
    ',' 像素标记
    'o' 圆标记
    'v' 倒三角标记
    '^' 正三角标记
    '<' 左三角标记
    '>' 右三角标记
    '1' 下箭头标记
    '2' 上箭头标记
    '3' 左箭头标记
    '4' 右箭头标记
    's' 正方形标记
    'p' 五边形标记
    '*' 星形标记
    'h' 六边形标记 1
    'H' 六边形标记 2
    '+' 加号标记
    'x' X 标记
    'D' 菱形标记
    'd' 窄菱形标记
    ' '
    '_' 水平线标记
    • 颜色的缩写
    字符 颜色
    'b' 蓝色
    'g' 绿色
    'r' 红色
    'c' 青色
    'm' 品红色
    'y' 黄色
    'k' 黑色
    'w' 白色
    • 示例:绘制正弦、余弦曲线,并设置线型、线宽、颜色、透明度

      python 复制代码
      # 绘制正弦曲线
      import numpy as np
      import matplotlib.pyplot as plt
      import math
      # 以0.1为单位,生成0~6的数据
      # np.pi 是NumPy库中定义的π(圆周率)的值,大约为3.141592653589793
      x = np.arange(0, 2 * np.pi, 0.1) # 以0.1为单位,生成0~6的数据
      print(x)
      y1 = np.sin(x)
      y2 = np.cos(x)
      # 绘制图形
      plt.plot(x, y1, label="sin", linewidth=2) # 实线,线宽2像素
      plt.plot(x, y2, label="cos", linestyle="--", linewidth=4) # 虚线,线宽4像素
      plt.xlabel("x") # x轴文字
      plt.ylabel("y") # y轴文字
      # 设置坐标轴范围
      plt.xlim(0, 2 * math.pi)
      plt.ylim(-1, 2)
      plt.title("sin & cos") # 图标题
      plt.legend() # 图例
      plt.show()
  • 3.设置坐标轴范围

    python 复制代码
    #x_limt_min: <float> x轴范围最小值
    #x_limit_max: <float> x轴范围最大值
    plt.xlim(x_limt_min, x_limit_max)
    #y_limt_min: <float> y轴范围最小值
    #y_limit_max: <float> y轴范围最大值
    plt.ylim(y_limt_min, y_limit_max)
  • 4.设置坐标刻度

    python 复制代码
    #x_val_list: x轴刻度值序列
    #x_text_list: x轴刻度标签文本序列 [可选]
    plt.xticks(x_val_list , x_text_list)
    #y_val_list: y轴刻度值序列
    #y_text_list: y轴刻度标签文本序列 [可选]
    plt.yticks(y_val_list , y_text_list)
  • 5.特殊点

    python 复制代码
    # xarray: <序列> 所有需要标注点的水平坐标组成的序列
    # yarray: <序列> 所有需要标注点的垂直坐标组成的序列
    plt.scatter(xarray, yarray,
    marker='', #点型 ~ matplotlib.markers
    s= , #大小
    edgecolor='', #边缘色
    facecolor='', #填充色
    zorder=3 #绘制图层编号 (编号越大,图层越靠上)
    )
  • 示例:绘制二次函数曲线,并在二次函数图像中添加特殊点

    python 复制代码
    # 绘制二次函数曲线
    import numpy as np
    import matplotlib.pyplot as plt
    import math
    
    x = np.arange(-5, 5, 0.1)  # 以0.1为单位,生成-5~5的数据
    print(x)
    y = x ** 2
    # 绘制图形
    plt.plot(x, y, label="$y = x ^ 2$",
             linewidth=2,  # 线宽2像素
             color="red",  # 颜色
             alpha=0.5)  # 透明度
    plt.xlabel("x")  # x轴文字
    plt.ylabel("y")  # y轴文字
    # 设置坐标轴范围
    plt.xlim(-10, 10)
    plt.ylim(-1, 30)
    # 设置刻度
    x_tck = np.arange(-10, 10, 2)
    x_txt = x_tck.astype("U")
    plt.xticks(x_tck, x_txt)
    y_tck = np.arange(-1, 30, 5)
    y_txt = y_tck.astype("U")
    plt.yticks(y_tck, y_txt)
    # 绘制特殊点
    plt.scatter(x_tck,  # x坐标数组
                x_tck ** 2,  # y坐标数组
                marker="s",  # 点形状 s:square
                s=40,  # 大小
                facecolor="blue",  # 填充色
                zorder=3)  # 图层编号
    plt.title("square")  # 图标题
    plt.legend(loc="upper right")  # 图例 upper right, center
    plt.show()
  • 6.设置坐标轴

    坐标轴名:left / right / bottom / top

    python 复制代码
    # 获取当前坐标轴字典,{'left':左轴,'right':右轴,'bottom':下轴,'top':上轴 }
    ax = plt.gca()
    # 获取其中某个坐标轴
    axis = ax.spines['坐标轴名']
    # 设置坐标轴的位置。 该方法需要传入2个元素的元组作为参数
    # type: <str> 移动坐标轴的参照类型 一般为'data' (以数据的值作为移动参照值)
    # val: 参照值
    axis.set_position(('data', val))
    # 设置坐标轴的颜色
    # color: <str> 颜色值字符串
    axis.set_color(color)
    python 复制代码
    # 设置坐标轴格式
    import matplotlib.pyplot as plt
    ax = plt.gca()
    axis_b = ax.spines['bottom'] # 获取下轴
    axis_b.set_position(('data', 0)) # 设置下轴位置, 以数据作为参照值
    axis_l = ax.spines['left'] # 获取左轴
    axis_l.set_position(('data', 0)) # 设置左轴位置, 以数据作为参照值
    ax.spines['top'].set_color('none') # 设置顶部轴无色
    ax.spines['right'].set_color('none') # 设置右部轴无色
    plt.show()
  • 7.图例

    python 复制代码
    # 显示两条曲线的图例,并测试loc属性
    # 再绘制曲线时定义曲线的label
    # label: <关键字参数 str> 支持LaTex排版语法字符串
    plt.plot(xarray, yarray ... label='', ...)
    # 设置图例的位置
    # loc: <关键字参数> 制定图例的显示位置 (若不设置loc,则显示默认位置)
    # =============== =============
    # Location String Location Code
    # =============== =============
    # 'best'           0
    # 'upper right'    1
    # 'upper left'     2
    # 'lower left'     3
    # 'lower right'    4
    # 'right'          5
    # 'center left'    6
    # 'center right'   7
    # 'lower center'   8
    # 'upper center'   9
    # 'center'         10
    # =============== =============
    plt.legend(loc='')
  • 8.备注

    python 复制代码
    # 在图表中为某个点添加备注。包含备注文本,备注箭头等图像的设置。
    plt.annotate(
    r'$\frac{\pi}{2}$', #备注中显示的文本内容
    xycoords='data', #备注目标点所使用的坐标系(data表示数据坐标系)
    xy=(x, y), #备注目标点的坐标
    textcoords='offset points', #备注文本所使用的坐标系(offset points表示参照点的偏移坐标系)
    xytext=(x, y), #备注文本的坐标
    fontsize=14, #备注文本的字体大小
    arrowprops=dict() #使用字典定义文本指向目标点的箭头样式
    )

    arrowprops参数使用字典定义指向目标点的箭头样式

    python 复制代码
    #arrowprops字典参数的常用key
    arrowprops=dict(
    arrowstyle='', #定义箭头样式
    connectionstyle='' #定义连接线的样式
    )

    箭头样式(arrowstyle)字符串如下

    python 复制代码
    ============ =============================================
    Name 			Attrs
    ============ =============================================
    '-' 			None
    '->' 			head_length=0.4,head_width=0.2
    '-[' 			widthB=1.0,lengthB=0.2,angleB=None
    '|-|' 			widthA=1.0,widthB=1.0
    '-|>' 			head_length=0.4,head_width=0.2
    '<-' 			head_length=0.4,head_width=0.2
    '<->' 			head_length=0.4,head_width=0.2
    '<|-' 			head_length=0.4,head_width=0.2
    '<|-|>' 		head_length=0.4,head_width=0.2
    'fancy' 		head_length=0.4,head_width=0.4,tail_width=0.4
    'simple' 		head_length=0.5,head_width=0.5,tail_width=0.2
    'wedge' 		tail_width=0.3,shrink_factor=0.5
    ============ =============================================

    连接线样式(connectionstyle)字符串如下

    python 复制代码
    ============ =============================================
    Name 			Attrs
    ============ =============================================
    'angle' 		angleA=90,angleB=0,rad=0.0
    'angle3' 		angleA=90,angleB=0`
    'arc' 			angleA=0,angleB=0,armA=None,armB=None,rad=0.0
    'arc3' 			rad=0.0
    'bar' 			armA=0.0,armB=0.0,fraction=0.3,angle=None
    ============ =============================================

    示例:在二次函数图像中添加备注

    python 复制代码
    # 将代码放到上面的二次函数中
    # 设置备注
    plt.annotate(
    r'$y = x ^ 2$', #备注中显示的文本内容
    xycoords='data', #备注目标点所使用的坐标系(data表示数据坐标系)
    xy=(4, 16), #备注目标点的坐标 (4,16)
    textcoords='offset points', #备注文本所使用的坐标系(offset points表示参照点的偏移坐标系)
    xytext=(20, 30), #备注文本的坐标
    fontsize=14, #备注文本的字体大小
    arrowprops=dict(
    arrowstyle="->", connectionstyle="angle3"
    ) #使用字典定义文本指向目标点的箭头样式
    )
相关推荐
MarsBighead2 分钟前
(二)PosrgreSQL: Python3 连接Pgvector出错排查
python·postgresql·向量数据库·pgvector
可涵不会debug6 分钟前
C语言文件操作:标准库与系统调用实践
linux·服务器·c语言·开发语言·c++
深蓝海拓22 分钟前
Pyside6(PyQT5)中的QTableView与QSqlQueryModel、QSqlTableModel的联合使用
数据库·python·qt·pyqt
无须logic ᭄30 分钟前
CrypTen项目实践
python·机器学习·密码学·同态加密
百流42 分钟前
scala文件编译相关理解
开发语言·学习·scala
Channing Lewis43 分钟前
flask常见问答题
后端·python·flask
Channing Lewis44 分钟前
如何保护 Flask API 的安全性?
后端·python·flask
水兵没月2 小时前
钉钉群机器人设置——python版本
python·机器人·钉钉
Evand J2 小时前
matlab绘图——彩色螺旋图
开发语言·matlab·信息可视化