深入了解Matplotlib中的子图创建方法

news2024/12/22 17:00:03

深入了解Matplotlib中的子图创建方法

    • 一 add_axes( **kwargs):
      • 1.1 函数介绍
      • 1.2 示例一 创建第一张子图
      • 1.2 示例二 polar参数的运用
      • 1.3 示例三 创建多张子图
    • 二 add_subplot(*args, **kwargs):
      • 2.1 函数介绍
      • 2.2 示例一
    • 三 两种方法的区别
      • 3.1 参数形式
      • 3.2 布局灵活性
      • 3.3 适用场景
      • 3.4 返回对象类型
      • 3.5 类比
    • 四 两种方法的优缺点
      • 4.1 add_axes()
      • 4.2 add_subplot()
    • 五 总结

前言

Hello 大家好!我是甜美的江。

在这里插入图片描述

今天我们将 深入了解Matplotlib中的子图的创建方法

而子图是Matplotlib中的一个重要概念,它们为我们提供了在同一图形中容纳多个独立图表的便捷方式。通过灵活运用子图,我们能够呈现更为丰富和详尽的信息,让数据背后的故事更为生动。

本篇博客将深入探讨Matplotlib中有关在Figure中创建子图的方法。我们将了解如何基于行、列和索引来布局子图。

无论你是数据科学家、工程师还是对数据可视化感兴趣的初学者,这篇博客都将为你提供全面的指导,助你在Matplotlib的世界中游刃有余。让我们开始这段关于子图创作的探险吧!

至于配置子图的各种属性,以及通过不同的绘图方法在子图中展示数据,由于篇幅问题,我将会通过后面的文章展示,也请大家点点关注,不要迷路哦。

在这里插入图片描述

接下来就让我们进入正文吧!

在Matplotlib提供了两种主要的子图创建方法:add_subplot()和add_axes()。

add_subplot()方法通过指定网格的行、列和子图的位置索引来创建子图,
而add_axes()方法则通过指定子图在整个图形区域中的相对位置和大小的方式创建子图。

add_subplot()更适合简单的子图布局,适用于均匀划分的网格结构,而add_axes()则更加灵活,允许直接指定子图的精确位置和大小,适用于复杂和自定义的布局需求。

选择合适的方法取决于具体的绘图目标和布局要求,这两种方法共同为用户提供了在Matplotlib中灵活创建和配置子图的手段。

接下来我们将具体介绍这两种方法。

一 add_axes( **kwargs):

add_axes()方法是Matplotlib中用于在Figure对象中创建子图(Axes对象)的函数。它允许用户以更为灵活的方式指定子图在整个图形区域中的位置和大小。

1.1 函数介绍

语法:

add_axes(rect, projection=None, polar=False, **kwargs)

参数:

  • rect: 用于指定新添加的 Axes 对象的位置和大小,是一个包含四个值的列表或元组,分别表示左、底、宽度和高度。这些值的范围都应该在
    [0, 1] 之间,表示相对于 Figure 的比例。
  • projection: 指定 Axes 对象的投影类型,通常用于创建特定类型的图,例如 3D 图等。默认为 None。
  • polar: 一个布尔值,指定是否使用极坐标系。默认为 False。
  • **kwargs: 其他关键字参数,用于设置 Axes 对象的属性。

返回值:

返回一个Axes对象,可以通过该对象进行进一步的配置和绘制。

类比:

假设我们有一个大的画廊(Figure)代表整个可用的绘图空间。我们想在这个画廊上挂上一些画(Axes对象)。add_axes
方法就像在画廊的特定位置挂上一幅完全自定义大小和位置的画。

在这里插入图片描述

1.2 示例一 创建第一张子图

代码:

import matplotlib.pyplot as plt

# 创建一个画廊(Figure),就像是一面大墙
fig = plt.figure()

# 在画廊上选择一个完全自定义的位置和大小,添加一个新的子图
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
ax.plot([0, 1], [0, 1])
ax.set_title('Custom Painting')

# 展示画廊
plt.show()

代码分析:

在这段代码中,我们使用 Matplotlib 创建一个画廊(Figure),类比为一面大墙,然后在画廊上选择一个完全自定义的位置和大小,添加了一个新的子图(Axes 对象)。

通过 fig.add_axes([0.1, 0.1, 0.8, 0.8]),在画廊的位置(左下角起始点为 (0, 0),右上角为 (1, 1))指定了一个相对位置和大小,创建了一个具有自定义尺寸和位置的子图 ax。

在该子图上,通过 ax.plot([0, 1], [0, 1]) 绘制了一条线,表示画的内容,然后使用 ax.set_title(‘Custom Painting’) 设置了子图的标题为 ‘Custom Painting’。

最后,通过 plt.show() 展示整个画廊,将这个自定义位置和大小的子图呈现在一个窗口中。这种方式使得可以更灵活地控制图形的布局,适用于需要特定尺寸和位置的图形显示场景。

运行结果:

在这里插入图片描述

1.2 示例二 polar参数的运用

代码:

import matplotlib.pyplot as plt
import numpy as np

# 生成一些示例数据
theta = np.linspace(0, 2*np.pi, 100)
r = theta  # 极坐标下的半径

# 创建极坐标图
plt.polar(theta, r, label='Example Polar Plot')

# 添加标题和图例
plt.title('Polar Plot Example')
plt.legend()

# 显示图形
plt.show()

代码分析:

这个例子中,theta 是角度的数组,r 是极坐标下的半径。通过使用 plt.polar() 函数,我们可以创建一个极坐标图。polar=True 参数告诉 Matplotlib 使用极坐标系。

这个简单的例子绘制了一个以角度为横坐标、半径为纵坐标的极坐标图。在这个图中,半径随着角度的增加而增加,因此图形呈螺旋状。

运行结果:
在这里插入图片描述

1.3 示例三 创建多张子图

使用add_axes()方法创建不同位置和大小的多个子图涉及指定每个子图在整个Figure中的位置和大小。

代码:

import matplotlib.pyplot as plt

# 创建Figure对象
fig = plt.figure()

# 使用add_axes()方法创建第一个子图
ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.8])  # 左、底、宽、高的比例

# 使用add_axes()方法创建第二个子图
ax2 = fig.add_axes([0.2, 0.5, 0.4, 0.3])  # 左、底、宽、高的比例

# 对子图进行配置和绘制操作
ax1.plot([1, 2, 3, 4], [10, 20, 25, 30], label='Subplot 1')
ax2.plot([1, 2, 3, 4], [30, 25, 20, 10], label='Subplot 2')

# 显示图例
ax1.legend()
ax2.legend()

# 显示图形
plt.show()

代码分析:

这段代码使用Matplotlib创建了一个包含两个子图的图形。首先,通过plt.figure()创建了一个Figure对象。

然后,使用add_axes()方法分别创建了两个子图ax1和ax2,并通过指定左、底、宽、高的比例来定义它们的位置和大小。

在配置和绘制子图方面,ax1和ax2分别使用plot()方法绘制了不同的曲线,并通过label参数为每个曲线指定标签。

随后,通过ax1.legend()和ax2.legend()分别在两个子图上显示图例。

最后,通过plt.show()显示整个图形。这段代码展示了如何在一个图形中创建多个自定义位置和大小的子图,并在子图上绘制不同的数据,同时添加图例以提供数据标识。

运行结果
在这里插入图片描述
从结果中,我们可以看到,虽然我们成功创建了两张子图,但是很明显,两张子图有着重叠,这也是add_axes()的一个缺点,add_axes()提供了相对底层的接口,需要手动指定每个子图的位置和大小。

对于初学者而言,可能需要花更多的时间理解和调整参数,所以在创建多个子图的时候,建议使用add_subplot()方法,接下来就让我们进入对它的学习吧。

在这里插入图片描述

二 add_subplot(*args, **kwargs):

add_subplot(*args, **kwargs)是Matplotlib中用于在Figure对象中创建子图(AxesSubplot对象)的方法。它允许用户通过指定行数、列数和子图位置索引等参数,在整个图形区域中创建均匀划分的子图网格。

2.1 函数介绍

语法

add_subplot(nrows, ncols, index, **kwargs)

参数

  • nrows: 子图网格的行数。
  • ncols: 子图网格的列数。
  • index: 要添加的子图的位置,从左上角开始逐行逐列计数,例如,3 表示第三个位置。
  • **kwargs: 其他关键字参数,用于设置 Axes 对象的属性。

返回值

返回值是一个AxesSubplot对象。
AxesSubplot是SubplotBase的子类,它表示在Figure中创建的子图。通过返回的AxesSubplot对象,可以对子图进行各种配置和绘制操作,例如添加数据、设置坐标轴标签、调整子图布局等。
这样的对象可以用于在创建的子图上执行各种定制化的任务,使用户能够灵活控制图形的外观和内容。

可以将 add_subplot 方法类比为将一张画布(Figure)分成若干小块,每个小块就是一个子图(Axes)。这个方法是在画布上规划子图的位置和布局,然后返回一个代表特定子图的 Axes 对象,以便在该子图上进行绘图。

类比:画廊的墙上挂画

想象你有一面大墙(Figure),你想在这面墙上挂上几幅画。你可以将这面墙分成若干小块,每个小块就是一个子图(Axes)。

add_subplot 就像是在这面墙上选择一个小块的位置,然后返回一个代表这个小块的画布。

2.2 示例一

import matplotlib.pyplot as plt

# 创建一个画布(Figure),就像是一面大墙
fig = plt.figure()

# 在这面墙上选择一个位置,添加一个子图
ax1 = fig.add_subplot(2, 2, 1)
ax1.plot([0, 1], [0, 1])
ax1.set_title('Painting 1')

# 在另一个位置添加另一个子图
ax4 = fig.add_subplot(2, 2, 4)
ax4.plot([0, 1], [0, -1])
ax4.set_title('Painting 4')

# 继续添加更多子图...

# 调整整个墙上挂画的布局
plt.tight_layout()

# 展示画廊
plt.show()

代码分析:

这段代码使用 Matplotlib 创建一个画布(Figure),类比为一面大墙,然后在墙上选择两个位置并分别添加两个子图。

首先,通过 plt.figure() 创建一个画布 fig,这是整个图形的容器。接着,使用 fig.add_subplot(2, 2, 1) 在画布上选择第一个位置,创建一个子图 ax1,并使用 ax1.plot([0, 1], [0, 1]) 在该子图上绘制一条线。设置子图标题为 ‘Painting 1’。

接着,使用 fig.add_subplot(2, 2, 4) 在画布上选择第四个位置,创建另一个子图 ax4,并使用 ax4.plot([0, 1], [0, -1]) 在该子图上绘制另一条线。设置子图标题为 ‘Painting 4’。

代码中有注释提示可以继续添加更多子图,然后通过 plt.tight_layout() 调整整个画布上挂画的布局,确保子图之间的间距适当。

最后,使用 plt.show() 展示整个画廊,将所有的子图呈现在一个窗口中。这种方式使得可以在同一个画布上创建一个复杂的图形布局,类似于在一面墙上挂多幅画。

运行结果:

在这里插入图片描述

在这个类比中,add_subplot 就是在画廊的墙上选择一个位置,并返回一个代表这个位置的画布。然后,你可以在这个画布上绘制你想要的图像(挂上你想要的画)。通过在不同的位置添加子图,你就可以在一张大墙上创建一个复杂的画廊。

三 两种方法的区别

add_subplot()和add_axes()是Matplotlib中用于创建子图的两种主要方法,它们之间有以下区别:

3.1 参数形式

add_subplot()方法接受行数、列数和子图位置索引等参数,用于在整个图形区域中创建均匀划分的子图网格。

add_axes()方法接受一个包含四个浮点数的列表作为参数,用于指定子图在整个图形区域中的位置和大小。

3.2 布局灵活性

add_subplot()方法适用于创建简单的网格布局子图,它会将图形区域均匀划分为行数乘以列数的网格,并根据指定的索引位置创建子图。

add_axes()方法更加灵活,允许用户直接指定子图的位置和大小,可以实现各种复杂和自定义的布局。

3.3 适用场景

add_subplot()适用于一般的绘图需求,特别是当子图需要按照规则的网格布局时,比较方便和简洁。

add_axes()适用于需要更精确控制子图位置和大小的情况,特别是对于非均匀划分或自定义布局的需求,具有更大的灵活性和定制性。

3.4 返回对象类型

add_subplot()方法返回的是AxesSubplot对象,是SubplotBase的子类,用于操作子图。

add_axes()方法返回的是Axes对象,用于对子图进行各种配置和绘制操作。

总的来说,add_subplot()适用于简单的网格布局,而add_axes()则适用于需要更灵活和精确控制子图位置和大小的情况。选择合适的方法取决于具体的绘图需求和布局要求。

3.5 类比

想象你正在设计一个相册布局,其中包含多张照片。

这个相册是一个整体的画布,而每张照片则是画布上的子图。

在这个情境下,add_subplot()就好比是将相册的画布均匀地分成行数和列数,然后在每个子区域中放置一张照片,形成一个规整的网格。这种方式适用于希望照片按照规则排列的情况,比如按行或按列排列。

而相对应地,add_axes()则像是你手动地选择并指定每张照片在相册上的位置和大小。

这使得你能够更加灵活地设计相册,可以实现非均匀划分的布局,也能够自定义每张照片的具体位置和大小,创造出更为个性化和复杂的相册布局。

这种方式适用于希望有更多设计自由度、精确控制布局的需求,比如要在相册中添加一张大幅照片或者自由排列的小照片。

因此,在这个相册设计的例子中,add_subplot()类似于规则的照片网格布局,而add_axes()提供了更灵活、更自定义的照片摆放方式,适应了不同的设计需求。

四 两种方法的优缺点

4.1 add_axes()

优点:

灵活性:
add_axes()方法提供了很高的灵活性,允许用户直接指定子图的位置和大小。这意味着你可以实现各种复杂和自定义的布局,包括非均匀划分和自由排列的子图。

定制性:
由于你可以精确控制每个子图的位置和大小,因此可以实现非常定制化的布局,适应各种特殊需求和设计。

多子图场景:
适用于需要在同一Figure中创建多个不同位置和大小的子图的场景,每个子图可以独立地进行配置和绘制。

缺点:

相对复杂:
相对于add_subplot()等简单规则布局的方法,add_axes()可能需要更多的手动调整和计算,特别是在创建多个子图时。这可能使代码相对复杂,并增加错误的可能性。

不适用于简单规律布局:
如果你的需求是在整个画布上创建简单的规律布局,像是网格形式的子图,那么add_axes()可能会显得过于繁琐,此时使用add_subplot()可能更为方便。

相对底层:
add_axes()提供了相对底层的接口,需要手动指定每个子图的位置和大小。对于初学者而言,可能需要花更多的时间理解和调整参数。

总体来说,选择使用add_axes()方法还是其他方法取决于你的具体需求。如果你需要更大的灵活性和定制性,并且能够处理较为复杂的布局,那么add_axes()可能是一个不错的选择。如果你的需求是相对简单的规律布局,那么其他方法可能更为便捷。

4.2 add_subplot()

优点:

简单易用:
add_subplot()方法是一种简单而直观的方式创建子图。你只需要指定子图的行数、列数以及子图的索引位置即可,而无需手动指定位置和大小。

规律布局:
适用于需要在整个Figure上创建规律布局的场景,例如网格形式的子图。通过指定行数和列数,Matplotlib会自动计算每个子图的位置,无需手动计算。

易于理解:
对于初学者而言,add_subplot()提供了更为直观的接口,减少了对位置和大小参数的手动调整,有助于降低代码的复杂性。

缺点:

灵活性受限:
相对于add_axes()等方法,add_subplot()的灵活性较低。虽然适用于规律布局,但在需要非常定制化的布局时可能不够灵活。

位置和大小难以调整:
对于每个子图,你只能通过add_subplot()的参数来指定其在整个Figure中的位置,但无法直接控制其大小。如果有对子图位置和大小有更精细要求的情况,可能需要借助其他方法或手动调整。

不适用于复杂布局:
当需要在同一Figure中创建多个不同位置和大小的子图,并且布局较为复杂时,add_subplot()可能显得不够灵活。

总体来说,add_subplot()适用于相对简单的规律布局,提供了一个直观而易用的接口。然而,在需要更大灵活性和定制性的场景下,可能需要使用其他方法,例如add_axes()。选择使用哪种方法取决于你的具体需求和代码的复杂性

五 总结

到这里,我们对Matplotlib中的子图创建方法的学习就完成啦

在这里插入图片描述
在本博客中,我们深入了解了Matplotlib中的子图创建方法,主要聚焦于add_axes()和add_subplot()两种常用方法。这两种方法在创建子图时各具优缺点,选择合适的方法取决于具体的需求和布局要求。

综上所述,了解Matplotlib中的子图创建方法是使用该库进行数据可视化的关键一步。通过熟练掌握这些方法,我们能够更好地控制图形的外观和布局,提高可视化效果和表达能力。希望这篇博客能够为你在Matplotlib中创建子图提供清晰的指导,让您更加自如地进行数据展示和分析。

谢谢大家的阅读!

如果觉得这篇博客对你有用的话,别忘记三连哦。

我是甜美的江,让我们我们下次再见

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1419380.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于YOLOv8的摄像头吸烟行为检测系统(Python源码+Pyqt6界面+数据集)

💡💡💡本文主要内容:详细介绍了摄像头下吸烟行为检测系统,在介绍算法原理的同时,给出Pytorch的源码、训练数据集以及PyQt6的UI界面。在界面中可以选择各种图片、视频进行检测识别,可进行置信度、Iou阈值设定…

【linux】磁盘空间不足-常用排查和处理命令

【linux】磁盘空间不足-常用排查和处理命令 1.通查一下 df -h #查看服务器磁盘空间情况 du -hs * 2>/dev/null #列出各目录所占空间大小 或 du -h -d 1 2>/dev/null #列出各目录所占空间大小 1.1情况一 df 磁盘空间和du 目录空间占用相等&#xff0c…

离线安装nginx_银河麒麟系统_nginx报错_503_500 Internal Server Error----nginx工作笔记007

如果报这个错误,意思就是,对于nginx.conf文件中指定的,文件夹没有权限 那么这个是去给对应的文件夹赋权限: chmod 777 /opt/module/test_web 就可以了,然后再去访问就不会报错了,还有 503的错误都可以这样解决 然后关于离线安装nginx,尝试了一下如果把之前安装过的nginx,直接…

app逆向-frida定位签名校验

文章目录 一、前言二、如何实现签名校验三、案例:定位签名校验 一、前言 当我们说应用签名校验时,实际上是一种安全机制,用于确保移动应用在被安装和运行时没有被篡改或修改。这个机制通过在应用程序文件上附加一种数字签名的方式来实现。 …

2023年算法GWCA -CNN-BiLSTM-ATTENTION回归预测(matlab)

2023年算法GWCA -CNN-BiLSTM-ATTENTION回归预测(matlab) GWCA -CNN-BiLSTM-Attention长城建造算法优化卷积-长短期记忆神经网络结合注意力机制的数据回归预测 Matlab语言。 长城建造算法(Great Wall Construction Algorithm,GWC…

Centos Cron设置定时任务

这本是很简单的问题,但是我服务器重装系统两次,遇到的问题都不一样,所以记录一下 1.首先要确保服务器上有 cron 服务 sudo systemctl status crond2.设置时区 sudo timedatectl set-timezone Asia/Shanghai3.重启crond 服务使crond服务的时…

指针的深入理解(一)

这一节主要复习数组指针,int (* )[ ] 就是数组指针类型的标志。 因为有()将*括起来,所以(*)表示一个指针。[ ] 表示数组,所以(*)[ ]就表示一个指向数组的指针&#xff…

【C++】I/O多路转接详解(一)

目录 1. 背景引入1.1 IO的过程1.2 五种IO模型1.2.1 阻塞IO1.2.2 非阻塞IO1.2.3 信号驱动IO1.2.4 IO多路转接1.2.5 异步IO 1.3 同步通信 与 异步通信1.4 阻塞 与 非阻塞1.4.1 阻塞与非阻塞区别1.4.2 设置非阻塞IO 2. select2.1 接口使用2.2 select执行过程2.3 select代码实践 3.…

C++ 数论相关题目:卡特兰数应用、快速幂求组合数。满足条件的01序列

给定 n 个 0 和 n 个 1 ,它们将按照某种顺序排成长度为 2n 的序列,求它们能排列成的所有序列中,能够满足任意前缀序列中 0 的个数都不少于 1 的个数的序列有多少个。 输出的答案对 1097 取模。 输入格式 共一行,包含整数 n 。 …

开源大规模分布式MQTT消息服务器EMQX部署教程

1.EMQX是什么? EMQX 是一款开源的大规模分布式 MQTT 消息服务器,功能丰富,专为物联网和实时通信应用而设计。EMQX 5.0 单集群支持 MQTT 并发连接数高达 1 亿条,单服务器的传输与处理吞吐量可达每秒百万级 MQTT 消息,并…

数据结构----链表介绍、模拟实现链表、链表的使用

文章目录 1. ArrayList存在的问题2. 链表定义2.1 链表的概念及结构2.2 链表的组合类型 3. 链表的实现3.1 单向、不带头、非循环链表的实现3.2 双向、不带头节点、非循环链表的实现 4.LinkedList的使用4.1 什么是LinkedList4.2 LinkedList的使用4.2.1. LinkedList的构造4.2.2. L…

R语言(数据导入,清洗,可视化,特征工程,建模)

记录一下痛失的超级轻松的数据分析实习(线上),hr问我有没有相关经历,我说我会用jupyter book进行数据导入,清洗,可视化,特征工程,建模,python学和用的比较多,…

burp靶场--xss上篇【1-15】

burp靶场–xss https://portswigger.net/web-security/cross-site-scripting 1. 什么是xss: 跨站脚本 (XSS) 是一种通常出现在 Web 应用程序中的计算机安全漏洞。XSS 允许攻击者将恶意代码注入网站,然后在访问该网站的任何人的浏览器中执行该代码。这可能允许攻击…

【重磅发布】已开放!模型师入驻、转格式再升级、3D展示框架全新玩法…

1月23日,老子云正式发布全新版本。此次新版本包含多板块功能上线和升级,为用户带来了含模型师入驻、三维格式在线转换升级、模型免费增值权益开放、全新3D展示框架等一系列精彩内容! 1月23日,老子云正式发布全新版本。此次新版本…

【开源】基于JAVA语言的班级考勤管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统基础支持模块2.2 班级学生教师支持模块2.3 考勤签到管理2.4 学生请假管理 三、系统设计3.1 功能设计3.1.1 系统基础支持模块3.1.2 班级学生教师档案模块3.1.3 考勤签到管理模块3.1.4 学生请假管理模块 3.2 数据库设…

PyTorch自动微分机制的详细介绍

PyTorch深度学习框架的官方文档确实提供了丰富的信息来阐述其内部自动微分机制。在PyTorch中,张量(Tensor)和计算图(Computation Graph)的设计与实现使得整个系统能够支持动态的、高效的自动求导过程。 具体来说&#…

BL808学习日志-3-DPI-RGB屏幕使用-LVGL D0

一、DPI-RGB驱动 BL808的手册上显示是支持RGB565屏幕显示输出的,但是一直没找到网上的使用例程。且官方的SDK显示也是能够使用的,只是缺少了驱动。这一部分驱动在SIPEED的SDK中已经内置了,今天就是简单的点亮一个800*480 RGB565的屏幕。 二、…

第十一篇【传奇开心果系列】BeeWare的Toga开发移动应用示例:Briefcase和Toga 哥俩好

传奇开心果博文系列 系列博文目录BeeWare的Toga开发移动应用示例系列博文目录一、前言二、Briefcase和toga各自的主要功能分别介绍三、使用Toga 开发移动应用Briefcase工具是最佳拍档四、Briefcase搭档Toga创建打包发布联系人移动应用示例代码五、运行测试打包发布六、归纳总结…

OpenHarmony—ArkTS限制throw语句中表达式的类型

规则:arkts-limited-throw 级别:错误 ArkTS只支持抛出Error类或其派生类的实例。禁止抛出其他类型(例如number或string)的数据。 TypeScript throw 4; throw ; throw new Error();ArkTS throw new Error();限制省略函数返回类…

Codeforces Round 799 (Div. 4)

目录 A. Marathon B. All Distinct C. Where’s the Bishop? D. The Clock E. Binary Deque F. 3SUM G. 2^Sort H. Gambling A. Marathon 直接模拟 void solve() {int ans0;for(int i1;i<4;i) {cin>>a[i];if(i>1&&a[i]>a[1]) ans;}cout<&l…