在pandas中使matplotlib动态画子图的两种方法【推荐gridspec】

news2024/10/7 12:17:47

先上对比图,在这里插入图片描述

第一种方法,这里仅展示1个大区,多个的话需要加一层循环就可以了,主要是看子图的画法

当大区下面的国家为1个或2个时,会进行报错

# 获取非洲国家列表
african_countries = df[df['大区'] == '南亚大区']['进口国'].unique()

# 动态计算子图的行列数量
num_countries = len(african_countries)
rows = (num_countries + 2) // 3  # 计算行数
cols = min(3, num_countries)  # 最多3列

# 创建包含子图的图形
fig, axes = plt.subplots(rows, cols, figsize=(15, 8))
fig.suptitle('南亚大区不同国家进口金额月度变化趋势', fontsize=16, fontweight='bold')

# 循环绘制子图
for i, country in enumerate(african_countries):
    row, col = divmod(i, cols)
    ax = axes[row, col]
    
    # 按国家和月份对金额进行汇总
    monthly_sum = (df[(df['大区'] == '南亚大区') & (df['进口国'] == country)].groupby('月份')['金额'].sum() / 10000).round(1)
    
    # 绘制折线图
    ax.plot(monthly_sum.index, monthly_sum.values, marker='o', linestyle='-')
    ax.set_title(f'{country}进口金额月度变化趋势')
    ax.set_xlabel('月份')
    ax.set_ylabel('金额(万美元)')
    ax.grid(False)
    ax.tick_params(axis='x', rotation=45)

# 调整子图布局
plt.tight_layout(rect=[0, 0.03, 1, 0.95])

# 显示图形
plt.show()

第二种方法,这个可以动态的对数量进行调整,并不会出现空子图,仅有个框存在

# 不同大洲的列表
continents = ['北美大区', '拉美大区', '中东非大区', '南亚大区', '新亚太大区', '东欧大区', '西欧大区', '独联体大区', '东南亚大区']
for continent in continents:
    # 获取非洲国家列表
    african_countries = df[df['大区'] == continent]['进口国'].unique()

    # 动态计算子图的行列数量
    num_countries = len(african_countries)
    rows = (num_countries + 2) // 3  # 计算行数
    cols = min(3, num_countries)  # 最多3列

    # 创建包含子图的图形
    fig = plt.figure(figsize=(15, rows * 3.5))
    fig.suptitle(f'{continent}国家进口金额月度变化趋势', fontsize=16, fontweight='bold')
    gs = fig.add_gridspec(rows, cols)

    # 循环绘制子图
    for i, country in enumerate(african_countries):
        row, col = divmod(i, cols)
        ax = fig.add_subplot(gs[row, col])

        # 按国家和月份对金额进行汇总
        monthly_sum = (df[(df['大区'] == continent) & (df['进口国'] == country)].groupby('月份')['金额'].sum() / 10000).round(1)

        # 绘制折线图
        ax.plot(monthly_sum.index, monthly_sum.values, marker='o', linestyle='-')
        ax.set_title(f'{country}进口金额月度变化趋势')
        ax.set_xlabel('月份')
        ax.set_ylabel('金额(万美元)')
        ax.grid(False)
        ax.tick_params(axis='x', rotation=45)

    # 调整子图布局
    plt.tight_layout(rect=[0, 0.03, 1, 0.95])

    # 显示图形
    plt.show()

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

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

相关文章

ARM DAY3

硬件模块与总线连接:各种硬件模块(如 GPIO 控制器)与 CPU(或内核)通过总线进行连接。这个总线负责数据和指令的传输。 特殊功能寄存器(SFRs)的角色:每个硬件模块内部都有一组特殊功…

PowerDesigner 连接 MYSQL

我使用的是powerDesigner16的版本,使用前先保证安装了 mysql odbc 驱动包 选择:文件 -> 反向工程 -> database… 一大波图片正在来袭。。。 点击确认 至此连接成功

解决方案 | 如何构建市政综合管廊安全运行监测系统?

如何构建市政综合管廊安全运行监测系统?WITBEE万宾城市生命线智能监测仪器,5年免维护设计,集成10多项结构与气体健康监测指标,毫秒级快速响应,时刻感知综合管廊运行态势

make: /bin/nvcc: Command not found 解决找不到nvcc

首先输入nvcc -V查看nvcc路径,发现报错Command nvcc not found,接下来我们就要解决这个问题。 1)进入cuda的bin目录cd /usr/local/cuda/bin,ls查看是否有nvcc 说明存在nvcc但cuda路径没有添加系统变量 2)在bin目录下输…

C++中变量是按值访问的, Python 中变量的值是按引用访问的示例说明

C中变量是按值访问的&#xff0c; Python 中变量的值是按引用访问的示例说明 C、C、Python如何获取变量的地址 C语言 在C语言中&#xff0c;可以使用取地址运算符&#xff08;&&#xff09;来获取变量的地址。 例如&#xff1a; #include <stdio.h>int main() {…

基于SSM+Vue的网上超市系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

苏宁滑块验证

网址&#xff1a;https://passport.suning.com/ids/login总结一下&#xff0c;别被他的表面现象给骗了&#xff0c;这玩意儿&#xff0c;个人认为&#xff0c;腾讯的都没法跟他比&#xff01;&#xff01;&#xff01; 难点&#xff1a;动态混淆&#xff0c;vmp&#xff0c;图片…

PID学习

文章目录 1、 简介2、P 比例调节3、I 积分控制4、D 微分控制5、简单的模拟PID输出代码6、改进6.1 采样时间6.1.1 问题所在6.1.2 解决方案6.1.3 代码6.1.4 结果6.1.5 关于中断的旁注6.1.6 个人总结 6.2 微分项出现尖峰6.2.1 问题所在6.2.2 解决方案6.2.3 代码6.2.4 结果6.2.5 个…

执行上下文,js、React、HTML中的this

目录 执行上下文属性&#xff1a;变量对象、this&#xff0c;作用域链 变量对象是与执行上下文相关的数据作用域&#xff0c;存储&#xff1a;变量、函数声明 执行上下文生命周期 创建&#xff1a;生成变量对象、创建函数作用域&#xff0c;建立作用域链、确定this的指向 …

jdk 21发布的意义

jdk 21 最大的功能是虚拟线程&#xff0c;是一种绿色线程&#xff08;具体可以看周志明老师的书籍《深入理解java虚拟机》&#xff09;&#xff0c;目前 jvm 与操作系统的线程是一一对应的关系。 使用了虚拟线程可以减少资源消耗&#xff0c;减少操作系统上下文切换&#xff0…

AIGC绘本——海马搬家来喽

随着ChatGPT的快速发展&#xff0c;人工智能领域也发生了翻天覆地的变化。今天&#xff0c;我们迎合科技潮流&#xff0c;利用AIGC的强大能力&#xff0c;可以创作很多精彩的作品&#xff0c;比如这样一本名为《海马搬家》的绘本&#xff08;注&#xff1a;此绘本根据同名儿童故…

strtok()函数的使用方法

strtok() 函数用于将字符串分割成子字符串&#xff08;标记&#xff09;。它在 C 语言中非常常用&#xff0c;可以通过指定分隔符来拆分原始字符串&#xff0c;并依次返回每个子字符串。 以下是 strtok() 函数的使用方法&#xff1a; #include <stdio.h> #include <…

RK3568平台开发系列讲解(驱动篇)RK3568 I2C总线介绍

🚀返回专栏总目录 文章目录 一、I2C 简介1.1、起始位1.2、停止位1.3、数据传输1.4、应答信号1.5、I2C 写时序1.6、I2C 读时序1.7、I2C 多字节读写时序二、RK3568 I2C 总线介绍沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将讲解RK3568 I2C总线特性。 一、…

【中文输入时没有了提示选项】

打开电脑时发现&#xff0c;输入中文时&#xff0c;下方一直没有出现提示文字的选项&#xff0c;可能是电脑自动更新兼容的问题&#xff0c;上网查询了解决方案&#xff0c;按照下方步骤可以得到解决&#xff1a; step1&#xff1a;window键i //打开设置窗口 step2&#xf…

软件项目测试用例评审

软件项目测试用例评审是确保测试计划的一部分&#xff08;即测试用例&#xff09;满足项目质量和要求的关键步骤之一。以下是一个通用的软件项目测试用例评审流程&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎…

UbuntuToGo | Ubuntu 22.04.6 VMware UEFI启动 VHD虚拟磁盘

Win下新建固定大小VHD磁盘 磁盘管理器 随便选一个磁盘 点击操作 创建固定大小VHD(多等一会儿 固定大小比较慢) VMware 中新建虚拟机 自定义 在选择磁盘之前全部默认&#xff0c;选择磁盘选择 使用现有虚拟磁盘 现有磁盘文件选择刚才新建的VHD文件(一定要是固定大小的VHD)…

在DFMEA实施过程中,如何区分预防措施和探测措施?

在FMEA分析中&#xff0c;我们常常需要在分析原因之后采取相应的改善措施&#xff0c;一般现行的控制方法有“预防”和“探测”两大类&#xff0c;但是很多情况下我们无法掌握两者的区别&#xff0c;在这里我们明确一下。 FMEA手册中对预防和探测是这样定义的&#xff1a; 预…

计网第五章(运输层)(八)(TCP的连接释放)

目录 一、基本概述 二、具体实现 三、经典问题之为什么客户进程不直接进入关闭状态&#xff1f; 四、保活计时器 一、基本概述 上篇博客&#xff08; 计网第五章&#xff08;运输层&#xff09;&#xff08;七&#xff09;&#xff08;TCP的连接建立&#xff09;&#xff…

LeetCode 面试题 05.01. 插入

文章目录 一、题目二、Java 题解 一、题目 给定两个整型数字 N 与 M&#xff0c;以及表示比特位置的 i 与 j&#xff08;i < j&#xff0c;且从 0 位开始计算&#xff09;。 编写一种方法&#xff0c;使 M 对应的二进制数字插入 N 对应的二进制数字的第 i ~ j 位区域&#x…

ID保持的人像生成

AIGC真实人像写真&#xff0c;也即输入一些图片&#xff0c;生成图片里对应人物在不同场景和风格下的图片。妙鸭相机作为AIGC领域一款成功的收费产品为大家展示了如何使用AIGC技术只需要少量的人脸图片建模&#xff0c;即可快速提供真/像/美的个人写真&#xff0c;在极短的时间…