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"
    ) #使用字典定义文本指向目标点的箭头样式
    )
相关推荐
程序员_三木5 分钟前
Three.js入门-Raycaster鼠标拾取详解与应用
开发语言·javascript·计算机外设·webgl·three.js
是小崔啊15 分钟前
开源轮子 - EasyExcel01(核心api)
java·开发语言·开源·excel·阿里巴巴
tianmu_sama21 分钟前
[Effective C++]条款38-39 复合和private继承
开发语言·c++
黄公子学安全24 分钟前
Java的基础概念(一)
java·开发语言·python
liwulin050625 分钟前
【JAVA】Tesseract-OCR截图屏幕指定区域识别0.4.2
java·开发语言·ocr
jackiendsc29 分钟前
Java的垃圾回收机制介绍、工作原理、算法及分析调优
java·开发语言·算法
Oneforlove_twoforjob34 分钟前
【Java基础面试题027】Java的StringBuilder是怎么实现的?
java·开发语言
羚羊角uou36 分钟前
【C++】优先级队列以及仿函数
开发语言·c++
FeboReigns42 分钟前
C++简明教程(文章要求学过一点C语言)(1)
c语言·开发语言·c++
FeboReigns1 小时前
C++简明教程(文章要求学过一点C语言)(2)
c语言·开发语言·c++