Matplotlib数据可视化:三大容器对象与常用设置(下)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: Matplotlib数据可视化:三大容器对象与常用设置(下)

2 axes


axes可以认为是figure这张画图上的子图,因为子图上一般都是坐标图,所以我更愿意理解为轴域或者坐标系。


2.1 创建axes


一个figure可以有多个axes, 无论是pyplot模块还是figure实例内都定义有多种创建axes的方法。(1) plt.axes()


plt.axes()是指pyplot模块中的axes()方法,该方法会在当前激活的figure中创建一个axes,并使创建好的axes处于激活状态。当传入的第一个位置参数为空时,该方法会创建一个占满整个figure的axes;通常我们可以传入一个tuple参数(left, botton, width, height)作为第一个位置参数,tuple中四个元素分别表示与figure左边框比例距离,边框宽度占figure宽度的比例,宽度比例,高度占figure高度的比例。通过这种方式添加axes时,matplotlib会自动创建一个axes,然后将创建好的axes按照给定的位置和size添加到figure中,最后返回一个axes的引用。


fig1 = plt.figure(figsize=(4,2), facecolor='grey')
ax1 = plt.axes((0.1, 0.1, 0.8, 0.7), facecolor='green')
fig2 = plt.figure(figsize=(4,2), facecolor='yellow')
ax2 = plt.axes((0.1, 0.1, 0.8, 0.8), facecolor='red')  # 这个axes将会被覆盖在下面
plt.show()


640.png

640.png

注意,如果在相同区域添加axes,后面添加的axes会把前面添加的axes覆盖。


fig = plt.figure(figsize=(4,2), facecolor='grey')
ax1 = plt.axes((0.1, 0.1, 0.8, 0.8), facecolor='green')
ax2 = plt.axes((0.1, 0.1, 0.8, 0.7), facecolor='red')  # 这个axes将会被覆盖在下面
plt.show()


640.png


(2) figure.add_axes()


figure.add_axes()方法的作用是将一个axes添加到figure中,这一方法可以传入一个已创建好的axes作为第一个参数,add_axes会将传入的axes添加到figure中,但这种情况使用不多。在大多数情况下,我们会如同上述在plt.axes()方法中那样传递一个tuple参数(left, botton, width, height)作为第一个位置参数。同样,如果在相同区域添加axes,后面添加的axes会把前面添加的axes覆盖。


fig = plt.figure(figsize=(4,2), facecolor='grey')
fig.add_axes((0.1, 0.1, 0.3, 0.7), facecolor='green')  # 这个axes将会被覆盖在下面
fig.add_axes((0.5, 0.1, 0.3, 0.7), facecolor='red')
plt.show()


640.png


(3) plt.subplot与plt.subplots()


plt.subplot和plt.subplots()是在pyplot模块中定义的两个方法,两个方法都是将figure划分为多行多列的网格,然后添加axes,但功能和用法却有些许不同。


  • plt.subplot()


plt.subplot主要包括三个参数(nrows, ncols, index),分别表示行数、列数和索引,该方法会根据指定的行列数对figure划分为网格,让后在指定索引的网格中创建axes,并返回该axes的引用。索引是从1开始从左往右,从上到下递增,例如plt.subplot(2,2,4)表示将figure划分为两行两列的4个网格,并在第4个子网格中创建一个axes然后返回。注意,每一次调用plt.subplot()方法只会在指定索引的子网格中创建axes,而不是在所有子网格中都创建axes,如果需要在多个子网格中创建axes,那么就需要多次调用plt.subplot()指定不同的索引。另外,如果nrows, ncols, index三个参数都小于10,可以将这三个参数合并成一个3位整数来写,例如plt.subplot(2,2,4)与plt.subplot(224)是完全等效的。


fig = plt.figure(figsize=(4,4), facecolor='grey')
ax1 = plt.subplot(221,facecolor='green')
ax2 = plt.subplot(224,facecolor='red')
plt.show()


640.png


  • plt.subplots()


与plt.subplot()不同的是,plt.subplots()会重新创建一个figure,然后将创建好的figure按照指定的行列数划分为网格,并在每一个子网格中各创建一个axes,最终同时返回figure和所有子网格中axes组成的numpy数组中。


fig, axes = plt.subplots(2,2,facecolor='grey')
fig.suptitle('figure title')
print(type(axes))
axes[0,0].set_facecolor('green')
axes[1,1].set_facecolor('red')
plt.show()


<class 'numpy.ndarray'>


640.png


plt.subplots()还有一对参数sharex, sharey用于设置是否共享x轴或y轴,这对参数有取值可以使bool型或'none', 'all', 'row', 'col'这4个字符串中的一个,分别有以下含义:


  • False 和 'none'表示不共享,任何子图中的x轴或y轴都是相互独立的;
  • True 和 'all'表示所有子图共享x轴或y轴;
  • 'row' 表示同一行的子图共享x轴或y轴;
  • 'col' 表示同一列的子图共享x轴或y轴;


fig, axes = plt.subplots(2,2,sharex=True,sharey=True,facecolor='grey')
fig.suptitle('figure title')
axes[0,0].set_facecolor('green')
axes[1,1].set_facecolor('red')
plt.show()


640.png


(4) figure.add_subplot()与figure.subplots()


figure.add_subplot与上文中介绍过的plt.subplot()无论是功能还是使用方法上都是几乎一样的,唯一区别就是plt.subplot()的目标是在当前激活的figure,而figure.add_subplot()是调用add_subplot()方法的figure。


fig = plt.figure(figsize=(4,4), facecolor='grey')
ax1 = fig.add_subplot(221,facecolor='green')
ax2 = fig.add_subplot(224,facecolor='red')
plt.show()


640.png


figure.subplots()的功能、用法又与上文中介绍过的plt.subplots()很相似,区别在于figure.subplots()不会重新创建一个figure,而是对当前的figure进行划分网格并在每一个网格中都创建一个axes。


fig = plt.figure(facecolor='grey')
axes = fig.subplots(2,2)
axes[0, 0].set_facecolor('green')
axes[1, 1].set_facecolor('red')
plt.show()


640.png


2.2 axes的常用设置


axes是matplotlib作图中众多元素的核心,可以说,大多数的设置都可以通过axes来完成。


2.2.1 设置标题


fig = plt.figure(facecolor='grey')
fig.suptitle("figure 标题", color='red')
ax1 = fig.add_subplot(121)
ax2 = fig.add_subplot(122)
ax1.set_title(' 图 1')  # 设置标题
ax2.set_title(' 图 2')
plt.show()


640.png


2.2.2 设置图例


fig = plt.figure(figsize=(5,3))
axes = fig.add_axes((0,0,0.8,1))
x = np.linspace(0, 10, 1000)
line1, = axes.plot(x, np.sin(x))
line2, = axes.plot(x, np.cos(x))
axes.legend([line1, line2],['正弦', '余弦'])
plt.show()


640.png


2.2.3 设置坐标轴名称


fig = plt.figure(figsize=(4,1))
axes = fig.add_axes((0,0,1,1))
axes.set_xlabel('x轴', fontsize=15)
axes.set_ylabel('y轴', fontsize=15, color='red')
plt.show()


640.png


2.2.4 设置坐标轴范围


fig = plt.figure(figsize=(6,2))
axes = fig.add_axes((0,0,0.8,1))
x = np.linspace(-3, 5, 1000)
line1, = axes.plot(x, np.sin(x))
axes.set_xlim((-3,5))  # 设置横坐标范围
axes.set_ylim((-3,3))  # 设置纵坐标范围
plt.show()


640.png


2.2.5 隐藏边框


fig = plt.figure(figsize=(6,2))
axes = fig.add_axes((0,0,0.8,1))
x = np.linspace(-10, 10, 1000)
line1, = axes.plot(x, np.sin(x))
axes.set_xlim((-10,10))  # 设置横坐标范围
axes.set_ylim((-2,2))  # 设置纵坐标范围
axes.spines['right'].set_color('none') #隐藏掉右边框线
axes.spines['top'].set_color('none')    #隐藏掉左边框线
plt.show()


640.png


2.2.6 显示网格


fig = plt.figure(figsize=(6,2))
axes = fig.add_axes((0,0,0.8,1))
x = np.linspace(-10, 10, 1000)
line1, = axes.plot(x, np.sin(x))
axes.set_xlim((-10,10))  # 设置横坐标范围
axes.set_ylim((-2,2))  # 设置纵坐标范围
axes.grid(True)
plt.show()


640.png


2.2.7 添加注释


fig = plt.figure(figsize=(6,2))
axes = fig.add_axes((0,0,0.8,1))
x = np.linspace(-10, 10, 1000)
line1, = axes.plot(x, np.sin(x))
axes.set_xlim((-10,10))  # 设置横坐标范围
axes.set_ylim((-2,2))  # 设置纵坐标范围
axes.grid(True)
axes.annotate('原点', xy=(0, 0),  # xy是指向点的坐标
             xytext=(2.5, -1.5),   # xytext注释文字的坐标
             arrowprops=dict(facecolor='red'))
plt.show()


640.png


3 axis


axis在matplotlib中是一种类似于坐标轴的概念,负责处理轴标签、刻度线、刻度标签、网格线的绘制。在大多数情况下,axis我们手动创建,在创建axes时会一并创建axis,通过axes的实例对象即可调用axes内的axis实例。通过axis实例,我们可以实现更加多样化、细微的图标操作。


通过axes实例可以调用get_xaxis()方法获取axis实例,然后实现对label等对象的操作。


3.1 axis常用设置


3.1.1 设置坐标轴名称


fig = plt.figure(figsize=(4,2), facecolor='grey')
axes = fig.add_axes((0, 0,1,1))
# x轴
axes.get_xaxis().get_label().set_text('x axis')
axes.get_xaxis().get_label().set_color('red')
axes.get_xaxis().get_label().set_fontsize(16)
# y轴
axes.yaxis.get_label().set_text('y axis')
axes.yaxis.get_label().set_color('blue')
axes.yaxis.get_label().set_fontsize(16)
plt.show()

640.png


3.1.2 设置坐标轴刻度标签样式


fig = plt.figure(figsize=(4,2), facecolor='grey')
axes = fig.add_axes((0, 0,1,1))
# 设置x轴刻度标签
for tl in axes.get_xaxis().get_ticklabels():
    tl.set_color('red')
    tl.set_rotation(45)
    tl.set_fontsize(16)
plt.show()

640.png


3.1.3 设置坐标轴刻度位置


import matplotlib.ticker as ticker
# Fixing random state for reproducibility
np.random.seed(19680801)
fig, ax = plt.subplots()
ax.plot(100*np.random.rand(20))
formatter = ticker.FormatStrFormatter('$%1.2f')
ax.yaxis.set_major_formatter(formatter)
for tick in ax.yaxis.get_major_ticks():
    tick.label1.set_visible(False)
    tick.label2.set_visible(True)
    tick.label2.set_color('green')
plt.show()


640.png


3.1.4 设置坐标轴位置

fig = plt.figure(figsize=(6,2))
axes = fig.add_axes((0,0,0.8,1))
x = np.linspace(-10, 10, 1000)
line1, = axes.plot(x, np.sin(x))
axes.set_xlim((-10,10))  # 设置横坐标范围
axes.set_ylim((-2,2))  # 设置纵坐标范围
axes.spines['right'].set_color('none') #隐藏掉右边框线
axes.spines['top'].set_color('none')    #隐藏掉左边框线
axes.xaxis.set_ticks_position('bottom')  #设置坐标轴位置
axes.yaxis.set_ticks_position('left')  #设置坐标轴位置
axes.spines['bottom'].set_position(('data', 0))   #绑定坐标轴位置,data为根据数据自己判断
axes.spines['left'].set_position(('data', 0))
plt.show()

640.png

4 总结


本文主要介绍matplotlib图表的三种容器元素:figure、axes、axis。figure是最底层的容器,相当于一张画布,在画布上,我们可以画多个axes,axes就是figure上的子图,每个axes都是一张独立的图表,每个axes包含多个axis,通过axis我们可以实现对图表更多细节上的操作。


理解了matplotlib图表三个层次的布局,我们就可以通过figure  ->  axes  -->  axis的流程完成图表在宏观层面的创建。在后续的博客中,将会继续介绍对图表更多更加细节化的设置以及如何画各种不同的统计图表。

相关文章
|
2月前
|
数据可视化 数据挖掘 Linux
震撼发布!Python数据分析师必学,Matplotlib与Seaborn数据可视化实战全攻略!
在数据科学领域,数据可视化是连接数据与洞察的桥梁,能让复杂的关系变得直观。本文通过实战案例,介绍Python数据分析师必备的Matplotlib与Seaborn两大可视化工具。首先,通过Matplotlib绘制基本折线图;接着,使用Seaborn绘制统计分布图;最后,结合两者在同一图表中展示数据分布与趋势,帮助你提升数据可视化技能,更好地讲述数据故事。
46 1
|
1月前
|
数据可视化 数据挖掘 API
Python中的数据可视化利器:Matplotlib与Seaborn对比解析
在Python数据科学领域,数据可视化是一个重要环节。它不仅帮助我们理解数据,更能够让我们洞察数据背后的故事。本文将深入探讨两种广泛使用的数据可视化库——Matplotlib与Seaborn,通过对比它们的特点、优劣势以及适用场景,为读者提供一个清晰的选择指南。无论是初学者还是有经验的开发者,都能从中找到有价值的信息,提升自己的数据可视化技能。
64 3
|
18天前
|
数据可视化 定位技术 Python
Python数据可视化--Matplotlib--入门
Python数据可视化--Matplotlib--入门
21 0
|
2月前
|
数据可视化 数据挖掘 开发者
数据可视化新纪元!Python + Matplotlib + Seaborn,让你的数据故事生动起来!
在这个数据可视化的新纪元,让我们充分发挥 Python 的优势,用精彩的图表讲述数据背后的故事,为决策提供有力的支持,为交流带来清晰的视角。
31 4
|
2月前
|
数据可视化 Python
Python中的数据可视化:使用Matplotlib绘制图表
【9月更文挑战第11天】在这篇文章中,我们将探索如何使用Python的Matplotlib库来创建各种数据可视化。我们将从基本的折线图开始,然后逐步介绍如何添加更多的功能和样式,以使您的图表更具吸引力和信息量。无论您是数据科学家、分析师还是任何需要将数据转化为视觉形式的专业人士,这篇文章都将为您提供一个坚实的起点。让我们一起潜入数据的海洋,用视觉的力量揭示其背后的故事。
51 16
|
2月前
|
机器学习/深度学习 数据可视化 数据挖掘
数据可视化大不同!Python数据分析与机器学习中的Matplotlib、Seaborn应用新视角!
在数据科学与机器学习领域,数据可视化是理解数据和优化模型的关键。Python凭借其强大的可视化库Matplotlib和Seaborn成为首选语言。本文通过分析一份包含房屋面积、卧室数量等特征及售价的数据集,展示了如何使用Matplotlib绘制散点图,揭示房屋面积与售价的正相关关系;并利用Seaborn的pairplot探索多变量间的关系。在机器学习建模阶段,通过随机森林模型展示特征重要性的可视化,帮助优化模型。这两个库在数据分析与建模中展现出广泛的应用价值。
45 2
|
2月前
|
数据可视化 数据挖掘 API
使用Python进行数据可视化:探索Matplotlib和Seaborn库
【9月更文挑战第19天】在数据科学领域,将复杂的数据集转换成直观、易懂的图形是一项基本而关键的技能。本文旨在通过Python编程语言介绍两个强大的数据可视化库——Matplotlib和Seaborn,以及它们如何帮助数据分析师和研究人员揭示数据背后的故事。我们将从基础概念讲起,逐步深入到高级技巧,确保无论读者的背景如何,都能获得必要的知识和启发,以在自己的项目中实现有效的数据可视化。
|
2月前
|
数据可视化 数据挖掘 Python
惊呆了!Python数据分析师如何用Matplotlib、Seaborn秒变数据可视化大师?
在数据驱动时代,分析师们像侦探一样在数字海洋中寻找线索,揭示隐藏的故事。数据可视化则是他们的“魔法棒”,将复杂数据转化为直观图形。本文将带你探索Python数据分析师如何利用Matplotlib与Seaborn这两大神器,成为数据可视化大师。Matplotlib提供基础绘图功能,而Seaborn在此基础上增强了统计图表的绘制能力,两者结合使数据呈现更高效、美观。无论是折线图还是箱形图,这两个库都能助你一臂之力。
41 4
|
2月前
|
数据可视化 数据挖掘 数据处理
Python中数据可视化的魔法——使用Matplotlib和Pandas
【9月更文挑战第5天】在Python的世界里,数据可视化是连接复杂数据与人类直觉的桥梁。本篇文章将带领读者探索如何使用Matplotlib和Pandas这两个强大的库来揭示数据背后的故事。我们将从基础概念开始,逐步深入到高级技巧,让每一位读者都能轻松创建引人入胜的数据可视化图表,使数据分析变得既直观又有趣。
77 14
|
2月前
|
机器学习/深度学习 数据采集 监控
Pandas与Matplotlib:Python中的动态数据可视化
Pandas与Matplotlib:Python中的动态数据可视化

热门文章

最新文章