jjzjj

python数据可视化玩转Matplotlib subplot子图操作,四个子图(一包四),三个子图,子图拉伸

大锤爱编程 2023-07-19 原文

目录

一、创建子图

1.1 下图是绘制的子图:

1.2 代码释义:

二、绘制子图

2.1 代码引入

2.2 图形绘制

三、子图布局

3.1 子图布局说明

四、子图大小

4.1 子图大小调整

五、子图间距

5.1 子图代码调整

六、子图位置

6.1 代码引入

6.2 完整代码

6.3 完整代码

总结




大锤爱编程的博客_CSDN博客-大数据,Go,数据分析领域博主

Matplotlib是一个流行的Python可视化库,它提供了许多功能来创建各种类型的图表。其中一个功能是子图,它允许您在单个图表中绘制多个图。

一、创建子图

要创建子图,请使用plt.subplots()函数。该函数接受三个参数:行数、列数和子图编号。以下是一个简单的示例:

import matplotlib.pyplot as plt

fig, axs = plt.subplots(2, 2)

这将创建一个2x2的网格,其中包含4个子图。每个子图都有一个唯一的编号,可以在axs数组中访问。例如,要访问第一个子图,请使用axs[0, 0]

以下是一个示例代码,用于绘制2x2网格,其中每个子图都随机放置一个图形:

import matplotlib.pyplot as plt
import numpy as np

# 创建一个2x2的网格
fig, axs = plt.subplots(2, 2)

# 在每个子图中绘制一个图形
for ax in axs.flat:
    # 随机生成一些数据
    x = np.random.rand(100)
    y = np.random.rand(100)
    # 绘制散点图
    ax.scatter(x, y)

# 显示图形
plt.show()

1.1 下图是绘制的子图:

1.2 代码释义:

注释:

  • 导入必要的库:我们需要使用matplotlib和numpy库来生成散点图和随机数。
  • 创建一个2x2的网格:我们使用subplot()函数创建一个2x2的子图,该函数返回一个Figure对象fig和一个Axes对象数组axs,它包含四个子图,第一个参数2表示行数,第二个参数2表示列数。
  • 在每个子图中绘制一个图形:我们使用for循环遍历每个子图对象,对每个子图生成随机数据,使用scatter()函数在子图中绘制散点图。使用axs.flat将axs数组展平为一维,这样可以方便地遍历每个子图。
  • 随机生成一些数据:我们使用numpy库中的random模块来生成100个在[0,1)内的随机数作为横坐标和纵坐标。
  • 绘制散点图:我们使用子图对象ax的scatter()函数来绘制散点图,该函数接受横坐标和纵坐标作为参数,将它们绘制成散点图。
  • 显示图形:最后,我们调用plt.show()函数来显示所有子图。这将打开一个窗口,其中包含四个散点图子图。

二、绘制子图

2.1 代码引入

绘制子图与绘制普通图形非常相似。您可以使用子图的Axes对象上的任何Matplotlib绘图函数。例如,以下代码将在第一个子图中绘制一条线:

import matplotlib.pyplot as plt

fig, axs = plt.subplots(2, 2)
axs[0, 0].plot([1, 2, 3, 4], [1, 4, 2, 3])

要在所有子图中绘制相同的图形,请使用循环。以下代码将在所有子图中绘制一条线:

import matplotlib.pyplot as plt

fig, axs = plt.subplots(2, 2)
for ax in axs.flat:
    ax.plot([1, 2, 3, 4], [1, 4, 2, 3])

2.2 图形绘制

下面是绘制的子图:

三、子图布局

3.1 子图布局说明

默认情况下,plt.subplots()函数将子图放置在网格中,每个子图的大小相同。但是,您可以使用各种选项来更改子图的大小和位置。

四、子图大小

4.1 子图大小调整

要更改子图的大小,请使用figsize参数。以下代码将创建一个2x2的网格,其中每个子图的大小为4x4英寸:

import matplotlib.pyplot as plt

fig, axs = plt.subplots(2, 2, figsize=(4, 4))

五、子图间距

5.1 子图代码调整

要更改子图之间的间距,请使用wspacehspace参数。这些参数控制子图之间的水平和垂直间距,以及子图与图表边缘的距离。以下代码将创建一个2x2的网格,其中每个子图的水平和垂直间距为0.5英寸:

import matplotlib.pyplot as plt

fig, axs = plt.subplots(2, 2, figsize=(4, 4), wspace=0.5, hspace=0.5)

六、子图位置

6.1 代码引入

默认情况下,子图将放置在网格中,但您也可以使用GridSpec对象来更改子图的位置。以下代码将创建一个网格,其中第一个子图占据整个第一行,而第二个子图占据第一行的后两列:

import matplotlib.gridspec as gridspec
import matplotlib.pyplot as plt

fig = plt.figure()
gs = gridspec.GridSpec(2, 2, width_ratios=[1, 2])
ax1 = fig.add_subplot(gs[0, 0])
ax2 = fig.add_subplot(gs[0, 1:])

6.2 完整代码

以下是一个完整的Python代码,演示如何使用GridSpec对象来更改子图的位置。该代码将创建一个2x2的网格,其中第一个子图占据整个第一行,而第二个子图占据第一行的后两列。

import matplotlib.gridspec as gridspec
import matplotlib.pyplot as plt
import numpy as np

# 创建一个2x2的网格,第一个子图占据整个第一行,第二个子图占据第一行的后两列
gs = gridspec.GridSpec(2, 2, width_ratios=[1, 2])
ax1 = plt.subplot(gs[0, :])
ax2 = plt.subplot(gs[1, 0])
ax3 = plt.subplot(gs[1, 1])

# 在第一个子图中绘制一个折线图
x = np.linspace(0, 10, 100)
y = np.sin(x)
ax1.plot(x, y)

# 在第二个子图中绘制一个散点图
x = np.random.rand(100)
y = np.random.rand(100)
ax2.scatter(x, y)

# 在第三个子图中绘制一个柱状图
x = ['A', 'B', 'C', 'D']
y = [3, 7, 1, 9]
ax3.bar(x, y)

# 显示图形
plt.show()

下面是绘制的子图:

6.3 完整代码

示例1:使用GridSpec对象创建自定义子图布局

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

fig = plt.figure()

# 定义网格
gs = gridspec.GridSpec(3, 3)

# 创建子图1
ax1 = fig.add_subplot(gs[0, :])
ax1.set_title('Subplot 1')

# 创建子图2
ax2 = fig.add_subplot(gs[1, :2])
ax2.set_title('Subplot 2')

# 创建子图3
ax3 = fig.add_subplot(gs[1:, 2])
ax3.set_title('Subplot 3')

# 创建子图4
ax4 = fig.add_subplot(gs[2, :2])
ax4.set_title('Subplot 4')

# 添加图形
fig.tight_layout()
plt.show()

绘制出来的图片如下,可以看出来,符合实际需求。

总结

子图是Matplotlib中强大的功能之一。使用plt.subplots()函数,您可以方便地创建多个子图,并使用Axes对象绘制各种图形。使用各种选项,例如figsizewspacehspace参数,以及GridSpec对象,可以更改子图的大小、位置和间距。

有关python数据可视化玩转Matplotlib subplot子图操作,四个子图(一包四),三个子图,子图拉伸的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  4. ruby - Ruby 中的波形可视化 - 2

    我即将开始一个将录制和编辑音频文件的项目,我正在寻找一个好的库(最好是Ruby,但会考虑Java或.NET以外的任何库)以进行实时可视化波形。有人知道我应该从哪里开始搜索吗? 最佳答案 要流入浏览器的数据量很大。Flash或Flex图表可能是唯一能提高内存效率的解决方案。Javascript图表往往会因大型数据集而崩溃。 关于ruby-Ruby中的波形可视化,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c

  5. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  6. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  7. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  8. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  9. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  10. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

随机推荐