调整Matplotlib子图的大小

Matlab子图间距和边缘距离调整 Matlab子图间距和边缘距离调整 MATLAB绘图,尤其是绘制多子图时,会在周围留下许多空白,子图的间距有时也需要更改,但是subplot并没有提供这个功能,手动修改太过麻烦。 一共有两种方法可以解决这个问题 (1)使用tight_subplot函数,替代subplot进行绘图设置。 (2)matlab2019b及以后版本,tiledlayout函数也可以实现减小空白区域的功能 1.tight_subplot函数 函数的源码参考这个链接:https://www.mathworks.com/matlabce 阅读详情
AI摘要

本文介绍了如何避免Matplotlib中subplot导致的子图变形问题,提供了一种简便方法,即先设置大画布大小,然后在其中放置大小各异的子图,使子图根据画布自适应调整。

前段时间就遇到了这个问题,一直忘了写,今晚夜深人静总结一波~

问题

我相信,看到这篇博客的人,你肯定已经会使用Matplotlib中的pyplot画图。 

比如下面这种图

 你也应该会调整单个图的大小了,就是使用如下语句控制单个图形figure的大小,比如我这里设的8*6的。

fig3 = plt.figure(figsize=(8,6))

但随着继续深入的学习,有时我们很有必要将两个图画在一起,来做对比,所以你也应该会在一个画布上画多个子图了。比如下图

 即是通过subplot实现

#展示一下数据
fig = plt.figure(figsize=(15,7))

fig1 = plt.subplot(231)
plt.scatter(data.loc[:,'Avg. Area Income'],data.loc[:,'Price'])
plt.title('Income VS Price')


fig2 = plt.subplot(232)
plt.scatter(data.loc[:,'Avg. Area House Age'],data.loc[:,'Price'])
plt.title('Age VS Price')


fig3 = plt.subplot(233)
plt.scatter(data.loc[:,'Avg. Area Number of Rooms'],data.loc[:,'Price'])
plt.title('Number VS Price')


fig4 = plt.subplot(234)
plt.scatter(data.loc[:,'Area Population'],data.loc[:,'Price'])
plt.title('Population VS Price')


fig5 = plt.subplot(235)
plt.scatter(data.loc[:,'size'],data.loc[:,'Price'])
plt.title('size VS Price')
plt.show()

 目前为止图好像没有问题,那问题在哪呢?就是在子图比较少的时候,整个图可能会变形,出现下图情况。

这显然不是我们期望的,我们希望他不要拉长。但是貌似直接通过subplot画出的子图无法更改大小,网上给的一些方案也比较麻烦。

简便的解决方法

 把这两个子图画在同一个画布里,这样即是子图无法改变,但是外面的画布大小可以改变,子图就可以根据外面画布大小自适应的显示了。

对于该图

 其原始代码为

fig6 = plt.subplot(121)
label0 = plt.scatter(X.loc[:,'V1'][y_corrected==0],X.loc[:,'V2'][y_corrected==0])
label1 = plt.scatter(X.loc[:,'V1'][y_corrected==1],X.loc[:,'V2'][y_corrected==1])
label2 = plt.scatter(X.loc[:,'V1'][y_corrected==2],X.loc[:,'V2'][y_corrected==2])

plt.title("corrected data")
plt.xlabel('V1')
plt.ylabel('V2')
plt.legend((label0,label1,label2),('label0','label1','label2'))
plt.scatter(centers[:,0],centers[:,1])

fig7 = plt.subplot(122)
label0 = plt.scatter(X.loc[:,'V1'][y==0],X.loc[:,'V2'][y==0])
label1 = plt.scatter(X.loc[:,'V1'][y==1],X.loc[:,'V2'][y==1])
label2 = plt.scatter(X.loc[:,'V1'][y==2],X.loc[:,'V2'][y==2])

plt.title("labled data")
plt.xlabel('V1')
plt.ylabel('V2')
plt.legend((label0,label1,label2),('label0','label1','label2'))
plt.scatter(centers[:,0],centers[:,1])
plt.show()

 可以看到两个子图fig6和fig7都是直接使用subplot得到的,所以它变形了。

修改后应该是这样的:

对应代码 :

fig = plt.figure(figsize=(11,4))
fig6 = plt.subplot(121)
label0 = plt.scatter(X.loc[:,'V1'][y_corrected==0],X.loc[:,'V2'][y_corrected==0])
label1 = plt.scatter(X.loc[:,'V1'][y_corrected==1],X.loc[:,'V2'][y_corrected==1])
label2 = plt.scatter(X.loc[:,'V1'][y_corrected==2],X.loc[:,'V2'][y_corrected==2])

plt.title("corrected data")
plt.xlabel('V1')
plt.ylabel('V2')
plt.legend((label0,label1,label2),('label0','label1','label2'))
plt.scatter(centers[:,0],centers[:,1])

fig7 = plt.subplot(122)
label0 = plt.scatter(X.loc[:,'V1'][y==0],X.loc[:,'V2'][y==0])
label1 = plt.scatter(X.loc[:,'V1'][y==1],X.loc[:,'V2'][y==1])
label2 = plt.scatter(X.loc[:,'V1'][y==2],X.loc[:,'V2'][y==2])

plt.title("labled data")
plt.xlabel('V1')
plt.ylabel('V2')
plt.legend((label0,label1,label2),('label0','label1','label2'))
plt.scatter(centers[:,0],centers[:,1])
plt.show()

 相比原来的代码就多了第一行的操作,定一个合适画布的大小就可以方便动态调整子图了。

麻烦点的方法

 看到网上是有可以自定义子图大小的方法的,不过相比我想出来的这个方法,感觉太麻烦了。这个方法能解决我这一类问题了,如果后面遇到需要一个子图大一个子图小的问题再单独记录把。

就到这把,睡觉~

 

 

 

 

 

 

 

 

python数据可视化玩转Matplotlib subplot子图操作,四个子图(一包四),三个子图,子图拉伸 子图是Matplotlib中强大的功能之一。使用函数,您可以方便地创建多个子图,并使用Axes对象绘制各种图形。使用各种选项,例如figsizewspace和hspace参数,以及GridSpec对象,可以更改子图的大小、位置和间距。 阅读详情

相关推荐

使用Matplotlib的Subplots子图函数指定子图大小和比率

在上面的代码中,我们设置了子图的高度比例为2:1。也就是说,第一行的子图的高度是第二行的子图的两倍。也就是说,中间的子图的宽度是两侧子图的宽度的两倍。在这篇文章中,我们将学习如何使用gridspec_kw参数来指定子图的大小和比率。接下来,我们创建一个3x3的子图,并使用gridspec_kw参数来指定每个子图的大小和比率。在这个例子中,第一行的子图将占据整个第一行,第二行的子图将平均分配剩余的空间。通过使用gridspec_kw参数,我们可以轻松地自定义子图的大小和比例,帮助我们更好地展示数据。

qq_37934722的博客 2473

设置Matplotlib子图大小、上下左右间隔

matplotlib总结

weixin_43584690的博客 3545

【小白教程】本地部署VLM-R1模型(使用Docker)

通过Docker本地部署VLM-R1大模型,详细教程。

m0_69855053的博客 2937

python设置子图的大小_python - 使用matplotlib中的许多子图改进子图大小/间距

import matplotlib.pyplot as pltfig = plt.figure(figsize=(10,60))plt.subplots_adjust( ... )plt.subplots_adjust方法:def subplots_adjust(*args, **kwargs):"""call signature::subplots_adjust(left=None, botto...

weixin_39557419的博客 6389

为什么大语言模型推理要分成 Prefill 和 Decode?深入理解这两个阶段的真正意义

Prefill 阶段是语言模型推理中的第一个步骤,它负责处理你输入的所有上下文内容(prompt),为后续生成打下基础。“请解释一下 Transformer 的原理。这句话会被 tokenizer 编码为一串 token,比如["请", "解释", "一下", "Trans", "##former", "的", "原理", "。"]。然后这些 token 会进入 Transformer 模型进行前向传播。重点来了 👇。

Harry的博客 1万+

智能变电站协议系列-1、GOOSE、SV、MMS协议简介及GOOSE示例运行问题(IEC61850)

目前有一个新的研究,关于电网使用的GOOSE、SV、MMS协议,并使用相关库来做一下测试。由于goose、sv、mms等都属于IEC61850,因此,需要对IEC61850相关内容有一些了解,都是国际标准,属于电气自动化的一部分,对于自动化或者电气相关领域有接触的专业应该或多或少有一些了解。IEC61850目标是用于变电站自动化、分布式能源、水力和天然气发电厂、风力发电厂、电动汽车作为分布式能源等领域,目前似乎在变电站自动化方面的推广和使用更加广泛。

逍遥游的博客 2万+

matplotlib使用GridSpec调整子图位置大小 (非对称的子图)

先放上转载地址,来自这位大佬的博客: https://www.cnblogs.com/arkenstone/p/6872079.html 用matplotlib.pyplot的subplots命令可以很方便的画对称的子图,但是如果要画非对称的子图(如下)就需要用GridSpec命令来控制子图的位置和大小: 而上图的结构可以用一下两种方式画: import matplotlib.pyplot as plt from matplotlib.gridspec import GridSpec fig = plt

先说一下,就简单地写点儿氵文,不是博客,只是我的笔记本/工具书 1861

深入探究ASP.NET Core读取Request.Body的正确方式

前言# 相信大家在使用ASP.NET Core进行开发的时候,肯定会涉及到读取Request.Body的场景,毕竟我们大部分的POST请求都是将数据存放到Http的Body当中。因为笔者日常开发所使用的主要也是ASP.NET Core所以笔者也遇到这这种场景,关于本篇文章所套路的内容,来自于在开发过程中我遇到的关于Request.Body的读取问题。在之前的使用的时候,基本上都是借助搜索引擎搜索的答案,并没有太关注这个,发现自己理解的和正确的使用之间存在很大的误区。故有感而发,便写下此文,以作记录。学无止境

萌兔兔MMQ!! 776

python 调整子图布局_python-matplotlib更改子图的大小

我尝试用不同的子图制作一个人物.在该示例中,左面板是一张imshow图像,它有点小.如何放大ax1?为了使色标处于ax2和ax3的x轴水平?代码和输出为:import matplotlib.pyplot as pltimport numpy as npfig=plt.figure(figsize=(15,5.5))ax1=plt.subplot2grid((1,3),(0,0))ax2=plt.s...

weixin_39612849的博客 4106

Vue3 - H5实现省市区三四级联动组件,选择地址自定义省市区三级联动插件,弹框式多级联动选择器区域选择,vue3实现省市区三级联动地址选择组件(支持接口数据懒加载,样式精美漂亮,附带详细示例源码)

vue3实现省市区三级联动地址选择组件(附address文件),vue3实现省市区三级联动, 实现省、市、县地区三级联动功能,vue3省市区选择器,VUE3 h5如何实现省市区街道的四级联动选择,vue实现省市区选择联动,vue3城市三级联动(自定义组件)_VUE三级联动,插件省市区联动,vue如何实现省市区选择器,vue3怎样实现省市区地址三级联动,vue四级联动,vue3级联选择器,vue3实现选择省市区镇(街道)四级级联选择,包含三级级联选择,省市区街道三级四级联动选择器,VUE3自定义多列选择器省市

🏆 前端领域优质创作者 3068

【论文解读--Xdog】新型电驱式四足机器人研制与测试

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、四足机器人体型大小和驱动方式的比较二、四足机器人设计一些重要的结论三、系统控制框架四、系统硬件框架五、力位混合控制(阻抗控制)六、侧向平衡控制(和VMC如出一辙)七、电机驱动系统研制(FOC磁场定向控制)总结 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对新型电驱式四足机器人研制与测试做个简单的介绍,具体内容后续再更,其他模块可以参

qq_35635374的博客 3725

【Python数据可视化】matplotlib之设置子图:绘制子图、子图共享x轴坐标、调整子图间距、设置图片大小

这篇将分享数据可视化最重要也最常用的一个部分——子图,下面将会分享一些常用的方法:绘制子图、子图共享x轴坐标。

森林的博客——在完成之前,似乎总是不可能的~ 5249

基于 MFC 和 C++ 的语音识别客户端实现方案

语音 SDK:[Microsoft Speech SDK](https://learn.microsoft.com/zh-cn/azure/cognitive-services/speech-service/speech-sdk)(建议使用最新版)1. **Azure 语音服务密钥**:需要在 [Azure 门户](https://portal.azure.com/) 中创建语音资源,获取密钥和区域(如 `eastasia`),替换代码中的占位符。

寒寒豆豆软件公司的博客 152

控制 matplotlib 子图大小

效果图: 代码: import numpy as np import matplotlib.pyplot as plt '''调整 matplotlib 子图的大小''' x1 = np.linspace(0.0, 5.0) x2 = np.linspace(0.0, 2.0) y1 = np.cos(2 * np.pi * x1) * np.exp(-x1) y2 = ...

qwe1110的博客 6530

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python调整子图之间的间距_python – 在matplotlib中改进子图大小/间距与许多子图...

非常类似于this question,但有区别,我的数字可以与它需要是一样大。我需要在matplotlib中生成一堆垂直堆叠的图。结果将使用figsave保存并在网页上查看,所以我不在乎最终图像有多高,只要子图间隔,以便它们不重叠。无论我允许的数字有多大,子图总是似乎重叠。我的代码目前看起来像import matplotlib.pyplot as pltimport my_other_module...

weixin_40008566的博客 1198

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

python设置子图大小_从Matplotlib使用ImageGrid时如何调整子图形的大小

使用Python和Matplotlib,我试图生成一个由两个子图形组成的图形,每个子图形都包含一组带有公共颜色条的绘图。我几乎一切正常。我唯一搞不懂的是如何使顶部和底部子批次具有相同的宽度-即4x2网格+颜色条应具有与2x1网格+颜色条相同的宽度。左下角的图像与其他情节的形状不同,这是有意为之的。在我的密码是:import matplotlib.pyplot as pltfrom mpl_tool...

weixin_39839968的博客 1567

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

matplotlib画子图subplot

使用 matplotlib.subplot 绘制多个子图 subplot(numRows, numCols, plotNum) 每使用一次 subplot 函数,就对图 重新 进行一次划分 参数:numRows, numCols 表示划分为几行几列。 参数:plotNum表示该划分下的第几个图。 numRows, numCols 决定划分方式,plotNum决定该划分下的第几个子图。 先不看...

s1162276945的博客 1993

subplots绘制子图以及坐标轴大小控制

data = pd.DataFrame([[1, 2, 3, 4], [5, 6, 7, 8]]).T """如何绘制子图""" fig, axes = plt.subplots(2,1) for ax in axes: ax.set_ylabel("y", fontsize=5) ax.set_xlabel("x", fontsize=5) ax.tick_params(labelsize=5) axes[0].plot(data[0],data[1]) axes[1].s.

weixin_45063957的博客 7838
上一篇: 机器学习+深度学习笔记(持续更新~)
下一篇: 机器学习+深度学习笔记(9.5更新~)
小小的香辛料
小小的香辛料 领域专家: 算法与数据结构技术领域 领域专家: 算法与数据结构技术领域
博客等级 码龄9年 1万+粉丝 385原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小的香辛料

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值