IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Matplotlib数据可视化实操--axes()及其类函数和subplot()、subplots()、subplot2grid()用法说明 -> 正文阅读

[Python知识库]Matplotlib数据可视化实操--axes()及其类函数和subplot()、subplots()、subplot2grid()用法说明


一、Matplotlib axes类使用详解

Matplotlib首先需要通过调用pyplot模块中提供的figure()函数创建图形对象,然后通过对对象添加一个或多个axes绘图区域,具体的axes类的函数有以下3种:

2D 绘图区域(axes)包含两个轴(axis)对象;如果是 3D 绘图区域,则包含三个。

1.add_axes()函数

调用 add_axes() 方法是以figure()函数创建的画布为对象,生成一个 axes 绘图区域,其位置由4个浮点数元素组成的列表确定,形如 add_axes([left, bottom, width, height]),表示添加到画布中的矩形区域的左下角坐标(x, y),以及宽度和高度,4个参数的取值范围均在0-1之间。

每个元素的值是在将整个画布的长,宽看作单位1的前提下取值,比如,[ 0.1, 0.1, 0.8, 0.8],left=0.1是相对于长的1/10,bottom=0.1是相对于宽的1/10从而定位绘图区域的原点位置

直观展示如下:

import matplotlib.pyplot as plt
import numpy as np

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

绘制的图形区域为如下所示:
在画布中创建的绘图区域

2.legend()绘制图例

专业术语是图例,简单理解就是对绘图区域中包含所有线型的标注说明

axes类中的legend()函数是以创建的绘图区域为对象绘制画布中的图例,形如ax.legend(handles, labels, loc),它的三个参数说明:

  1. handles 参数,它也是一个列表,它包含了所有线型的实例,若没有说明则按之前代码绘制的线型为默认顺序对其进行名称标注,即对应标注的线型对象
  2. labels 是一个字符串列表,用来指定标签的名称,即命名相应对象的名称
  3. loc 是指定图例位置的参数,其参数值可以用字符串或整数来表示,即说明标注的位置

下面是 loc 参数的表示方法,分为字符串和整数两种:

位置自适应、右(左)上方、 左(右)下、 右侧、居中靠左(右)、底部(上部)居中、中部
字符串表示Best、upper right(left)、lower left(right)、right、center left(right)、lower(upper) center、center
整数数字表示0、1(2)、3(4)、5、6(7)、8(9)、10

3.plot()绘制线型

这是 axes 类的基本方法也是以创建的绘图区域为对象绘制画布中的线型,它将一个数组的值比如x,与另一个数组的值比如y ,绘制成线或标记plot() 方法具有可选格式的字符串参数,该参数用来指定线型、标记颜色、样式以及大小,形如ax.plot(x,y,'go-- ')

  1. 颜色代码如下:
蓝色绿色红色青色品红色黄色黑色白色
‘b’'g’‘r’‘c’‘m’‘y’‘k’‘w’
  1. 标记符号如下:
点标记圆圈标记'X’标记砖石标记六角标记正方形标记加号标记
‘.’‘o’‘x’‘D’‘H’‘s’‘+’
  1. 线型表示字符如下:
实线虚线点划线虚线六角标记
’-’‘–’‘-.’‘H’

4.实例演示

下面的例子,以直线图的形式展示了电视、智能手机广告费与其所带来产品销量的关系图。其中描述电视的是带有黄色和方形标记的实线,而代表智能手机的则是绿色和圆形标记的虚线。

import matplotlib.pyplot as plt
y = [1, 4, 9, 16, 25,36,49, 64]
x1 = [1, 16, 30, 42,55, 68, 77,88]
x2 = [1,6,12,18,28, 40, 52, 65]
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
l1 = ax.plot(x1,y,'ys-') 
l2 = ax.plot(x2,y,'go--') 
ax.legend(labels=(['tv', 'Smartphone']),loc = 'lower right')
ax.set_title("Advertisement effect on sales") #or plt.title()
ax.set_xlabel('medium') #or plt.xlabel()
ax.set_ylabel('sales') #or plt.ylabel()
plt.show()

显示的效果如下:
输出结果

二、subplot()函数用法详解

Matplotlib首先要调用pyplot模型中提供的subplot()函数,该函数可以将一个(图形对象)画布上均等的划分若干个子绘制区域进行操作,函数格式为plt.subplot(nrows, ncols, index) ,nrows 与 ncols 表示要划分几行几列的子区域(nrows*nclos表示子图数量),index 的初始值为1,用来选定具体的某个子区域,具体排列顺序是按从左向右,你上到下原则创建的。

例如:如subplot(233)表示在当前画布的右上角创建一个两行三列的绘图区域(如下图所示),同时选择在第 3 个位置绘制子图,
示意图

使用的三个原则和方法如下:

  1. 若使用subplot()函数在指定区域创造的新建子图与现有的子图重叠,那么重叠部分的子图将会被自动删除,因为它们不可以共享绘图区域
    import matplotlib.pyplot as plt
    plt.plot([1,2,3]) #创建第一个取值范围0-3的斜率为1的线性直线
    #现在创建一个子图,它表示一个有2行1列的网格的顶部图。
    #因为这个子图将与第一个重叠,所以之前创建的图将被删除
    plt.subplot(211) #在2行1列的第1个子区域内创建第一个子图取值范围0-12的斜率为1的线性直线
    plt.plot(range(12))
    plt.subplot(212, facecolor='y') #在2行1列的第2个子区域内创建第二个子图带有黄色背景
    plt.plot(range(12))
    plt.show()

上述代码运行结果,如下图所示:
subplot()输出结果

  1. 如果不想覆盖之前的图,需要使用 add_subplot() 函数,代码如下:
import matplotlib.pyplot as plt
fig = plt.figure()
plt.plot([1,2,3])
ax2 = fig.add_subplot(221,facecolor='y')
ax2.plot(range(12))
plt.show()

执行上述代码,输出结果如下:
add_subplot()绘图结果

  1. 通过给画布添加 axes 对象可以实现在同一画布中插入另外的图像
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_axes([0.1,0.1,0.8,0.8])
ax1.plot([1,2,3],'b')
ax2 = fig.add_axes([0.6,0.2,0.3,0.3])
ax2.plot([1,2,3]'r')
ax2.set_xlabel('x')
ax2.set_ylabel('y')
asx2.set_title('linear')
plt.show()

输出结果如下:
使用axes对象绘制图形

三、subplots()函数详解

matplotlib中调用的pyplot还提供了subplots()函数,使用方法和 subplot() 函数类似。其不同之处在于,subplots() 既创建了一个包含子图区域axes,又创建了一个 figure 图形对象,而 subplot() 只是创建一个包含子图区域的figure图形对象。其函数格式为fig , a = plt.subplots(nrows, ncols) ,函数的返回值是一个元组,包括一个图形对象和所有的 axes 对象。其中 axes 对象的数量等于 nrows * ncols,且每个 axes 对象均可通过索引值访问(从0开始)

    import matplotlib.pyplot as plt
    fig,a =  plt.subplots(2,2)
    import numpy as np
    x = np.arange(1,5)
    #绘制平方函数
    a[0][0].plot(x,x*x)
    a[0][0].set_title('square')
    #绘制平方根图像
    a[0][1].plot(x,np.sqrt(x))
    a[0][1].set_title('square root')
    #绘制指数函数
    a[1][0].plot(x,np.exp(x))
    a[1][0].set_title('exp')
    #绘制对数函数
    a[1][1].plot(x,np.log10(x))
    a[1][1].set_title('log')
    plt.show()

输出结果为:
subplots()绘制的图形

四、subplot2grid()函数详解

matplotlib.pyplot 模块提供了 subplot2grid() ,与 subplot() 和 subplots() 函数不同,subplot2gird() 函数以非等分的形式对画布进行切分,并按照绘图区域的大小来展示最终绘图结果。其函数格式为plt.subplot2grid(shape, location, rowspan, colspan) ,具体用函数参数意义为:

  1. shape:把该参数值规定的网格区域作为绘图区域;
  2. location:在给定的位置绘制图形,初始位置 (0,0) 表示第1行第1列;
  3. rowsapan/colspan:这两个参数用来设置让子区跨越几行几列。
    import matplotlib.pyplot as plt
    #使用 colspan指定列,使用rowspan指定行
    a1 = plt.subplot2grid((3,3),(0,0),colspan = 2)
    a2 = plt.subplot2grid((3,3),(0,2), rowspan = 3)
    a3 = plt.subplot2grid((3,3),(1,0),rowspan = 2, colspan = 2)
    import numpy as np
    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()

输出结果为:
subplots()函数绘制图形

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 18:47:30  更:2022-07-20 18:48:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 11:56:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码