设为首页 加入收藏

TOP

matplotlib详细教学(一)
2023-07-25 21:25:56 】 浏览:171
Tags:matplotlib

Matplotlib初相识

认识matplotlib

Matplotlib是一个Python 2D绘图库,能够以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形,用来绘制各种静态,动态,交互式的图表

一个最简单的绘图例子

matplotlib的图像都是画在对应的figure上,可以认为是一个绘图区域。而一个figure又可以包含一个或者多个axes,可以认为是子区域,这个子区域可以指定属于自己的坐标系。下面通过简单的实例进行展示:

import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
fig, ax = plt.subplots()  # 该函数创建一个包含1个axes的figure,并将两者进行返回
ax.plot([1,2,3,4],[1,4,2,3])

第一图

那么也可以用更为简单的方式来进行创建:

line = plt.plot([1,2,3,4],[1,4,2,3])

这是因为如果未指定axes,那么会自动创建一个,因此可以简化。

figure的组成

通常,一个完成的matplotlib图像会包括四个层级(容器):

  • Figure:顶级层,用来容纳所有绘图元素
  • Axes:matplotlib宇宙的核心,容纳了大量元素用来构造一幅幅的子图,一个figure可以由1个或者多个子图构成
  • Axis:axes的下层,用来处理所有与坐标轴、网格相关的元素
  • Tick:axis的下层,用来处理所有和刻度相关的元素

图2

两种绘图接口

matplotlib提供了两种最常用的绘图接口:

  • 创建figure和axes,然后在此之上调用绘图方法
  • 依赖pyplot自动创建figure和axes来绘图

就像是上小节所展示的那样两种创建图的方法。

通用绘图模板

Datawhale提供了一个通常的绘图模板,可以根据实际需要对该模板进行修改了补充:

# 先准备好数据
x = np.linspace(0, 2, 100)
y = x**2
# 设置绘图样式(非必须)
mpl.rc('lines', linewidth=4, linestyle='-.')
# 定义布局
fig, ax = plt.subplots()  
# 绘制图像
ax.plot(x, y, label='linear')  
# 添加标签,文字和图例
ax.set_xlabel('x label') 
ax.set_ylabel('y label') 
ax.set_title("Simple Plot")  
ax.legend() ;

图3


思考题

  • 请思考两种绘图模式的优缺点和各自适合的使用场景

    • 我觉得先创建figure和axes再进行绘图的方式更适用于你对图的规划比较清晰,或者你想要画多个子图,这样在同一个figure上作画会简洁方便;而pyplot模型更实用于你当前只需要画一个图,那么把所有元素都加到当前这个图上就可以了
  • 在第五节绘图模板中我们是以OO模式作为例子展示的,请思考并写一个pyplot绘图模式的简单模板

    • plt.plot(x,y,label='linear')
      plt.xlabel("x label")
      plt.ylabel("y label")
      plt.title("simple plot")
      plt.legend()
      

艺术画笔见乾坤

先准备待会儿要用到的库

import numpy as np
import pandas as pd
import re
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D   
from matplotlib.patches import Circle, Wedge
from matplotlib.collections import PatchCollection

概述

matplotlib的三层api

matplotlib的原理或者说基础逻辑是,用Artist对象在画布(canvas)上绘制(Render)图形。因此跟人作画类似,需要三个步骤:

  • 准备一个画图
  • 准备画笔、颜料
  • 作画

因此可以认为matplotlib有三层的API:

  • matplotlib.backend_bases.FigureCanvas 代表了绘图区,所有的图像都是在绘图区完成的
  • matplotlib.backend_bases.Renderer 代表了渲染器,可以近似理解为画笔,控制如何在 FigureCanvas 上画图。
  • matplotlib.artist.Artist 代表了具体的图表组件,即调用了Renderer的接口在Canvas上作图。

因此我们大部分是利用Artist类来进行绘图。

Artist的分类

Artist有两种类型:primitivescontainers

  • primitive是基本要素,包含一些我们要在绘图区作图用到的标准图形对象,例如曲线、文字、矩形等等。
  • container是容器,可以认为是用来放置基本要素的地方,包括图形figure,坐标系axes和坐标系axis

基本元素primitives

primitives主要有以下几种类型,我们按照顺序介绍。

2DLines

其中常见的参数主要有:

  • xdata:横坐标的取值,默认就是range(1,len(data)+1)
  • ydata:纵坐标取值
  • linewidth:线条的宽度
  • linestyle:线型
  • color:线条的颜色
  • marker:点的标注样式
  • markersize:标注的大小
如何设置参数属性

对于上面提到的各个参数有三种修改方法:

  • 在plot函数里面进行设置

    x = range(0,5)
    y = [2,5,7,9,11]
    plt.plot(x,y,linewidth = 10)  
    
  • 获取线对象,对线对象进行设置

    x = range(0,5)
    y = [2,5,7,8,10]
    line, = plt.plot(x, y, '-') # 这里等号坐标的line,是一个列表解包的操作,目的是获取plt.plot返回列表中的Line2D对象,返回是一个列表类型
    line.set_antialiased(False); # 关闭抗锯齿功能,调用线对象的函数
    
  • 获取线属性,使用setp函数设置

    x = range(0,5)
    y = [2,5,7,8,10]
    lines = plt.plot(x, y)
    plt.setp(lines, color='r', linewidth=10);
    
如何绘制lines

那我们常见的功能是绘制直线line,以及绘制errorbar误差折线图,下面对这两种分别进行介绍。


绘制line

可以采用两种方法来绘制直线:

1、plot方法

x = range(0,5)
y1 = [2,5,7,8,10]
y2= [3,6,8,9,11]
fig,ax= plt.subplots()
ax.plot(x,y1)
ax.plot(x,y2)
print(ax.lines); 

图4

打印为:

<Axes.ArtistList of 2 lines>

可以看到创建了2个lines对象。

2、Line2D对

首页 上一页 1 2 3 4 5 6 7 下一页 尾页 1/9/9
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇【Datawhale】动手学数据分析 下一篇【算法集锦】Python 性能检测分析..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目