matplotlib绘制图形入门操作:创建画布/调整子图/创建“AXES轴域”/调整子图间的距离/设置XY轴刻度及刻度名称/XY轴标题/图片标题

市面上太多关于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")
  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值