plt绘图之自适应子图间距

本文介绍了使用matplotlib库中plt.subplots和plt.tight_layout方法自适应调整子图在figure上位置及间距的技巧,避免标签重叠,提升图表美观度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

plt绘图之自适应子图间距

一、plt.subplots(constrained_layout=True)

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

plt.rcParams['savefig.facecolor']='0.8' 
plt.rcParams['figure.figsize']=5,5. 

def example_plot(ax,fontsize=12,nodec=False):
    ax.plot([1,2]) 
    
    ax.locator_params(nbins=3)
    if not nodec:
        ax.set_xlabel('x-label',fontsize=fontsize)
        ax.set_ylabel('y-label',fontsize=fontsize) 
        ax.set_title('Title',fontsize=fontsize) 
        
    else:
        ax.set_xticklabels('')
        ax.set_yticklabels('') 
    
fig,axs=plt.subplots(2,2,constrained_layout=False)
#当有多个子图时,不同坐标系的标签相互重叠了
for ax in axs.flat:  
    example_plot(ax)    

在这里插入图片描述


fig,axs=plt.subplots(2,2,constrained_layout=True)#改成True后可以自动调整绘图区域在整个figure上的位置
for ax in axs.flat:  
    example_plot(ax)    

在这里插入图片描述

plt.subplots(constrained_layout=True)的作用是:
自适应子图在整个figure上的位置以及调整相邻子图间的间距,使其无重叠。

二、plt.tight_layout()

另一个和constrained_layout相似的用法是plt.tight_layout()

matplotlib.pyplot.tight_layout(*, pad=1.08, h_pad=None, w_pad=None,
rect=None)

pad,h_pad,w_pad分别调整子图和figure边缘,以及子图间的相距高度、宽度。

plt.close('all')
fig1,ax1=plt.subplots()
example_plot(ax1,fontsize=24)#可以看到x轴标签有部分没有显示出来

在这里插入图片描述

plt.close('all')
fig,((ax1,ax2),(ax3,ax4))=plt.subplots(2,2)
example_plot(ax1)
example_plot(ax2)
example_plot(ax3)
example_plot(ax4) 

在这里插入图片描述

fig,((ax1,ax2),(ax3,ax4))=plt.subplots(2,2)
example_plot(ax1)
example_plot(ax2)
example_plot(ax3)
example_plot(ax4) 
plt.tight_layout() 

在这里插入图片描述

fig,((ax1,ax2),(ax3,ax4))=plt.subplots(2,2)
example_plot(ax1)
example_plot(ax2)
example_plot(ax3)
example_plot(ax4) 
plt.tight_layout(pad=0.4,h_pad=5.0,w_pad=5.0)  

在这里插入图片描述

当子图的大小不一样,只要网格规范是兼容的,plt.tight_layout()也起作用。

plt.close('all')
fig=plt.figure()

ax1=plt.subplot(221)
ax2=plt.subplot(223)
ax3=plt.subplot(122)

example_plot(ax1)
example_plot(ax2)
example_plot(ax3) 
plt.tight_layout() 

在这里插入图片描述

由plt.subplot2grid创建的子图,plt.tight_layout()也适用。

plt.close('all')
fig=plt.figure()

ax1=plt.subplot2grid((3,3),(0,0))
ax2=plt.subplot2grid((3,3),(0,1),colspan=2)
ax3=plt.subplot2grid((3,3),(1,0),colspan=2,rowspan=2)
ax4=plt.subplot2grid((3,3),(1,2),rowspan=2) 

example_plot(ax1)
example_plot(ax2)
example_plot(ax3)
example_plot(ax4)
plt.tight_layout() 

在这里插入图片描述
constrained_layout设计比plt.tight_layout更灵活,但是不适合和add_subplot,subplot2grid一起使用。

<think>嗯,用户想了解如何绘制与自适应特征选择相关的片,需要方法或工具。首先,我得明确自适应特征选择的概念。自适应特征选择通常指在机器学习中根据数据特性动态选择重要特征的过程。用户可能希望用表展示特征选择的方法、权重变化或效果对比。 接下来,我需要考虑用户可能的实际需求。他们可能是研究人员或数据科学家,需要制作学术论文或报告中的插。因此,工具需要专业且灵活。常见的绘图工具包括Python的Matplotlib、Seaborn,以及更高级的库如Plotly或Gradio。此外,可视化平台如TensorBoard也可能适用。 然后,结合用户提供的引用,引用[1]提到自适应显示的方法,引用[2]涉及ROI绘制和像标注,引用[3]提到多种统计表类型。这可能意味着用户对自适应显示和交互式绘图有需求。因此,在推荐工具时,需要考虑这些方面,比如使用支持交互的库或支持自定义绘图的工具。 用户可能不知道如何将自适应特征选择的结果可视化,比如特征权重、重要性排序或动态选择过程。需要分步骤说明,包括数据准备、选择算法、可视化方法等。例如,使用条形展示特征重要性,热力显示特征相关性,或动态展示选择过程。 还要考虑工具的使用便捷性。对于编程经验较少的用户,推荐像Orange3这样的可视化工具;对于有编程背景的,推荐Python库。同时,引用[3]提到的润乾报表支持多种表,可能适合需要嵌入报表系统的场景。 最后,生成相关问题时,要覆盖用户可能进一步询问的方向,如算法优化、动态交互实现、工具比较等,确保全面覆盖用户需求。</think>### 自适应特征选择相关片绘制方法及工具 #### 1. **核心概念与绘图目标** 自适应特征选择是通过算法动态筛选对模型贡献大的特征,绘制相关片需体现以下内容: - 特征重要性排序(如条形、热力) - 特征选择过程动态变化(如迭代权重变化曲线) - 选择前后的性能对比(如分类准确率对比) #### 2. **实现方法** ##### (1) **Python编程实现** - **Matplotlib/Seaborn**:绘制静态特征重要性 ```python import matplotlib.pyplot as plt feature_importance = [0.2, 0.5, 0.3] plt.bar(range(len(feature_importance)), feature_importance) plt.xticks(ticks=[0,1,2], labels=['特征A','特征B','特征C']) ``` - **Plotly**:生成交互式动态,支持鼠标悬停查看权重数值[^3] - **Gradio**:快速搭建特征选择过程可视化界面,支持实时参数调整[^2] ##### (2) **可视化工具** - **Orange3**:拖拽式数据挖掘工具,内置特征评分模块,可直接生成特征重要性热力 - **TensorBoard**:展示训练过程中特征权重的变化趋势(适用于深度学习模型) ##### (3) **自适应显示优化** 若需将大尺寸片适配到有限控件空间,可采用以下方法: - 使用`plt.tight_layout()`自动调整间距 - 对像控件设置缩放模式(如`stretch`或`aspectFit`)[^1] #### 3. **案例参考** - **特征权重动态变化**:用折线展示LASSO回归中不同$\lambda$值对应的特征系数变化 $$w_j(\lambda) = \arg\min_w \left( \|y - Xw\|^2 + \lambda \|w\|_1 \right)$$ - **特征相关性矩阵**:通过Seaborn的`clustermap`展示特征间Pearson相关系数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值