matplotlib绘制图形入门操作:创建画布/调整子图/创建“AXES轴域”/调整子图间的距离/设置XY轴刻度及刻度名称/XY轴标题/图片标题_请在创建一个画布,画布上有1*3个子图,分别是区间[-5,5]上的一次函数图像、二次函_牛奶没法用的博客-程序员宅基地

技术标签: python  matplotlib  

市面上太多关于matplotlib操作的说明,但是非常的杂,而且根据很多不够准确的地方,根据去官网查看API和其他文章,决定自己整理一份相关内容;为了建立自己的知识树,个人认为matplotlib可以总结成一下几点逻辑关系:
(1)画布figure可以创建一张或者多张(每张画布是可以“单独”保存)
(2)一张画布上可以创建很多个子图subplot,并根据自己的需求对子图的位置进行部署
(3)每张子图都可以绘制一组数据或者多组数据
(4)对数据的表述,个人选择可以分成:数据描述图形(线图,条形图等),数据分布图形(直方图,饼图,文字云,散点图等)

【疑问】有一个概念Axes“域”,个人认为这个“域”可以理解成一对XY轴,我们可以在一张画布上添加多个“域”(看上去好像多个子图一样),具体有什么实际上区别不明白,之后如果学习到了会更新这个内容

本文先对(1),(2)两部分内容进行总结,其中创建子图的问题上介绍5个布局生成子图的函数
附:matplotlib 官网 API :https://matplotlib.org/3.1.1/api/index.html


1. 创建画布:plt.figure()

如上所说,创建画布可以同时创建一个或多个,想在哪个画布上进行布局子图和绘制图形,就在相应的创建画布的代码下进行,功能的介绍如下:

figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)

参数说明:
(1)num:图像编号或名称,数字为编号 ,字符串为名称
(2)figsize:指定figure的宽和高,单位为英寸;
(3)dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80
(4)facecolor:背景颜色
(5)edgecolor:边框颜色
(6)frameon:是否显示边框

# 创建画布
import matplotlib.pyplot as plt

# 创建一个画布,画布序列号为1
fig1=plt.figure()
# 同时创建第二个画布:指定序列号为3;尺寸宽4高3;背景色为蓝(如果不指定序列号则自动增加为2)
fig3=plt.figure(num=3,figsize=(4,3),facecolor='blue')

2. 创建子图:

由于目前使用matplotlib库有限,所以无法理解创建“子图”和创建“轴域”有什么实际区分,个人觉得从图的展示情况看,想部署

可以个人将子图部署的位置分为三种,下面是三种部署的创建方式:

(1)固定行列分布的子图组布局(是否可以修改子图大小形状不确定):plt.subplots()
(2)创建单个子图,形状可以跨列的布局(是否可以跨行不确定):plt.figure().add_subplot()/plt.subplot()
(3)创建单个子图在一个固定行列分布的网格组中,子图形状任意布局:plt.subplot2grid()
(4)子图包含子图的结构:plt.figure().add_axes()

  • plt.subplots()的方法

plt.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw) :
参数重要参数解释如下:
(1)nrows=1, ncols=1:制作几行列的子图组
(2)sharex=False, sharey=False:子图组中XY轴的刻度是否一致,默认不一致
该方法返回两个值:
(1)fig : Figure
(2)ax : axes.Axes object or array of Axes objects.

实际上是这个函数是将两个函数封装成一个功能,分别是:创建一个 figure和一组子图组。

# 创建一个figure和一个2行2列的子图组
fig,axes=plt.subplots(2,2)
# 划分子图
ax1=axes[0,0]
ax2=axes[0,1]
ax3=axes[1,0]
ax4=axes[1,1]

# 另一种书写方式
f, ((ax11, ax12), (ax13, ax14)) = plt.subplots(2, 2)

在这里插入图片描述

  • plt.figure().add_subplot()的方法与plt.subplot()的方法

.add_subplot(nrows, ncols, index, **kwargs) 和.subplot(nrows, ncols, index, **kwargs) 函数功能是一样的,区别在于:
(1)使用 .add_subplot()函数,首先要先创建一个figure对象,通过对象调用这个函数;.subplot()直接创建
(2).add_subplot()函数实际功能是:“添加Axes到图中作为子图布置的一部分”;而.subplot()则是“在当前图中添加子图”

import matplotlib.pyplot as plt

# 使用plt.figure().add_subplot()创建一个左右两子图的布局
fig = plt.figure() 
ax1 = fig.add_subplot(121)    # 参数书写形式还可以(1,2,1)
ax2 = fig.add_subplot(122) 

# 使用plt.subplot()创建一个:上面一个图,下面两个图的布局
plt.subplot(2,1,1)				# 位置上,相当于占了一整行,“两列”

plt.subplot(2,2,3)				# 第二行,第一列
plt.subplot(2,2,4)				# 第二行,第二列

plt.show()

在这里插入图片描述

  • plt.subplot2grid()方法

plt.subplot2grid(shape,loc,rowspan = 1,colspan = 1,fig = None,** kwargs )的主要参数解释如下:
a. shape : 制作几行几列的子图布局
b. loc : 当前子图的位置在哪行哪列
c. rowspan : 跨几行
d. colspan : 跨几列

import matplotlib.pyplot as plt

# 创建一个3行3列的子图格,该子图位于0行0列的位置,跨3列
ax1 = plt.subplot2grid((3, 3), (0, 0), colspan=3)  # stands for axes
# 创建一个3行3列的子图格,该子图位于1行0列的位置,跨2列
ax2 = plt.subplot2grid((3, 3), (1, 0), colspan=2)
# 创建一个3行3列的子图格,该子图位于1行2列的位置,跨2行(1行中的0和1索引的列被ax2填充)
ax3 = plt.subplot2grid((3, 3), (1, 2), rowspan=2)
ax4 = plt.subplot2grid((3, 3), (2, 0))
ax5 = plt.subplot2grid((3, 3), (2, 1))

在这里插入图片描述

  • plt.figure().add_axes()方法

想使用.add_axes()函数新增子区域,则需要先创建一个figure的对象,在通过对象调用函数;
该函数的功能是:“Add an axes to the figure” 即新增子区域指定在画布内任意位置,且可以按画布的比例设置子区域大小。
.add_axes([left, bottom, width, height]) 具体参数如下:
left, bottom表示左边以及下边的起始位置,width, heigh表示宽高延伸原fig的比例。

import matplotlib.pyplot as plt

# 首先需要创建一个画布的对象
fig = plt.figure()

# 子区域从figure 10%的位置开始绘制, 宽高延伸figure的80%
left, bottom, width, height = 0.1, 0.1, 0.8, 0.8
ax1 = fig.add_axes([left, bottom, width, height])  # main axes

# 子区域从figure 20%+60% 的位置开始绘制, 宽高增长figure的25%
ax2 = fig.add_axes([0.2, 0.6, 0.25, 0.25])  # inside axes

在这里插入图片描述

3. 调整子图间的距离:plt.subplots_adjust()

subplots_adjust(left = None,bottom = None,right = None,top = None,wspace = None,hspace = None )
参数默认值及解释:
(1)left = 0.125 :the left side of the subplots of the figure
(2)right = 0.9:the right side of the subplots of the figure
(3)bottom = 0.1:the bottom of the subplots of the figure
(4)top = 0.9:the top of the subplots of the figure
(5)wspace = 0.2 : the amount of width reserved for space between subplots, expressed as a fraction of the average axis width
(6)hspace = 0.2:the amount of height reserved for space between subplots, expressed as a fraction of the average axis height

4. 设置XY轴刻度及刻度名称/XY轴标题/图片标题

  • XY轴刻度及刻度名称

同样有两种情况:只有画布;创建了子图对象或者“域”对象

months = range(12)
month_names = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep","Oct", "Nov", "Dec"]

# 只有画布
plt.xticks(months,month_names)
plt.yticks([0.10, 0.25, 0.5, 0.75],['10%', '25%', '50%', '75%'])

# ax=plt.subplot()
ax.set_xticks(months)		# 设置X轴刻度值
ax.set_xticklabels(month_names)		# 匹配X轴刻度名字

ax.set_yticks([0.10, 0.25, 0.5, 0.75])		# 设置Y轴刻度值
ax.set_yticklabels(['10%', '25%', '50%', '75%'])		# 匹配Y轴刻度名
  • 设置XY轴名称

同样有两种情况:只有画布;创建了子图对象或者“域”对象

# 只有画布
plt.xlabel("Months")
plt.ylabel('Conversion')

# 创建了子图对象或者“域”对象
ax.set_xlabel("Months")
ax.set_ylabel('Conversion')
  • 设置标题

同样有两种情况:只有画布;创建了子图对象或者“域”对象

# 只有画布时
plt.title('My Last Twelve Years of Coffee Drinking')

# 创建了子图对象或者“域”对象
ax.set_titel("My Last Twelve Years of Coffee Drinking")
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42969619/article/details/99477275

智能推荐

win10网线插上显示的ipv6的服务器,win10如何开启IPV6及WIN10无法上ipv6的解决方法_weixin_39968410的博客-程序员宅基地

提示:本文基于Teredo隧道开启IPv6,其他开启IPv6的方法暂待完善。特别重要:找到 网络和共享中心 - 更改适配器设置 - 本地连接(无线网络则找到WLAN或蓝牙网络连接)- 属性,把 IPv6协议 前面的勾去掉,确定。否则会出现一些奇怪的问题。命令行:Win+X 打开CMD 或 Windows PowerShell(管理员),输入命令://设置Teredo服务器,默认为:win10..._电脑打开 ipv6

从Delphi 7升级到Delphi XE_delphixe和delphi7_ppayun的博客-程序员宅基地

Delphi 7和XE中间有好几个版本,可都不太流行,一是因为Delphi有些边缘化,二是7在XP环境下是近乎完美的版本。市场上关于delphi的书越来越少,提供从7升级到XE介绍的资料几乎没用。这里我试着列举一下7和XE的差异和注意事项,给需要升级的朋友一些线索。1. 7和XE是可以共存的,7的工程文件是.dpr,XE的是.dproj,用XE打开dpr文件会提示升级,自动创建新的项目文件。X_delphixe和delphi7

######习题6-5 使用函数验证哥德巴赫猜想 (20分)_要求实现一个判断素数的简单函数,并利用该函数验证哥德巴赫猜想:任何一个不小于6_小白鼠666的博客-程序员宅基地

本题要求实现一个判断素数的简单函数,并利用该函数验证哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇素数之和。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。函数接口定义:int prime( int p );void Goldbach( int n );其中函数prime当用户传入参数p为素数时返回1,否则返回0;函数Goldbach按照格式“n=p+q”输出n的素数..._要求实现一个判断素数的简单函数,并利用该函数验证哥德巴赫猜想:任何一个不小于6

从零开始入门pwn(二):环境搭建_pwn环境搭建_小白之耻的博客-程序员宅基地

一.前言前几天写了一些关于pwn的介绍以及一些前置知识,其实那些知识都是浅尝辄止就行,重点还得放在后续的做题中,边做边学不香吗,不仅有成就感还能快速熟悉pwn绝对不是因为没时间去专门学。但是之前的前置知识主要还是为了给那些真正没有基础的小白一个相对平滑的入门曲线,对于真正想要入门pwn的同学来说,前置知识其实都已经掌握过了..._pwn环境搭建

linux俄罗斯方块源程序,《俄罗斯方块游戏》项目实作【附源码】_我爱专利的博客-程序员宅基地

此游戏的界面分为3种,即游戏前界面、游戏时界面和游戏后界面1、游戏前界面:即在游戏开始之前为用户呈现的界面,其中包括1张背景图和3个按钮,3个按钮分别为“开始”、“设置”和“退出”。当选择“开始”时,即进入游戏时界面并2、游戏时界面:即在游戏进行时的界面,其实就一张背景图就行了。不过我将整个界面分划成3个逻辑区,游戏的图案,游戏的分数等这些东西只需在3、游戏后界面:即在游戏结束时所弹出的界面,它并..._如何用linuxc编写俄罗斯方块代码流程和过程

炒鸡简单的bfs_分享vn1.9.13(一款炒鸡强大简单的剪辑软件)_soul,,,明灵的博客-程序员宅基地

Dungeon MasterYou are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of unit cubes which may or may not be filled with rock. It takes one minute to move one un..._分享vn1.9.13(一款炒鸡强大简单的剪辑软件)

随便推点

RNN模型_Houser_qihao的博客-程序员宅基地

RNN模型我们先来看一个RNN经典结构,图1展示了一个典型按时间展开后的RNN结构。从图1可以看出,RNN在每一个时刻都有一个输入Xt,然后根据当前节点的状态At计算输出值ht,而At是根据上一时刻的状态At-1和当前的输入Xt共同决定的。和卷积神经网络卷积核或池化核的参数共享类似,这里RNN结构中的参数在不同时刻中也是共享的。1.2.1 RNN前向传播过程图2 RNN的前..._rnn模型

BindingSource的使用范例_QQ1422078449的博客-程序员宅基地

public partial class Form1 : Form { private DataSet gDataSet = GetDS(); public Form1() { InitializeComponent(); // Set the data sourc

Element-ui input框效验_XLLcsdn的博客-程序员宅基地

<template> <div class="info" <el-form :model="batch" :rules="rules" ref="batch"> <el-form-item label="审核意见:" prop="auditOpinion" class="auditOpinion" ref="auditOpinion"> ...

十进制转二进制原理_假装会飞的博客-程序员宅基地

1. 十进制整数转二进制假设十进制正整数值为A,对应的二进制数为abcde。众所周知,二进制数换算为十进制的公式如下:A = a(2^4) + b(2^3) + c(2^2) + d(2^1) + e(2^0)所以咱们只要把a,b,c,d,e都取出来就能得到二进制的值。又 A = 2 * (a(2^3) + b(2^2) + c(2^1) + d(2^0)) + e所以A除以2即能得到整数位a(2^3) + b(2^2) + c(2^1) + d(2^0) 和余数e上边得到的整数a_十进制转二进制原理

7 客户端认证方式 之 client_secret_jwt_python jwt client_secret client_id_markix的博客-程序员宅基地

`client_secret_jwt`方式就是利用 `JWT` 进行认证。请求方和授权服务器,两者都知道客户端的 `client_secret`,通过相同的 `HMAC` 算法(对称签名算法)去加签和验签 `JWT` ,可以达到客户端认证的目的。_python jwt client_secret client_id

python注册表_Python模块——_winreg操作注册表 | 学步园_土盐的博客-程序员宅基地

From:http://blog.sina.com.cn/s/blog_4b5039210100gmsb.html用python操作修改windows注册表,显然要比用C或者C++简单。通过python操作注册表主要有两种方式,一种是通过python的内置模块_winreg,另一种方式就是Win32Extension For Python的win32api模块。这里主要简单看看用内置模块_winr..._dir, type = _winreg.queryvalueex(key, shell_folder_name)dir, type = _winreg.

推荐文章

热门文章

相关标签