第五章. 可视化数据分析图表—常用图表的绘制5—多个子图表

news2024/11/28 22:41:12

第五章. 可视化数据分析图

5.3 常用图表的绘制5—多个子图表

·Matplotlib可以实现在一张图上绘制多个子图表,Matplotlib提供了三种方法:一是使用subplot函数,二是使用subplots,三是使用add_subplot函数
·subplot方法和add_subplot,定制效果比较好,可以实现子图在图中的各种布局
·subplots方法不那么灵活,但可以用较少的代码实现绘制多个子图表

1.matplotlib.pyplot.subplot 函数

subplot函数直接指定划分方式和位置,它可以将一个绘图区域划分成n个子图,每个subplot函数只能绘制一个子图。

1).语法:

matplotlib.pyplot.subplot(*args,**kwargs)

参数说明:
*args:当传入的参数个数未知时使用*args
**kwargs:关键字参数,其他可选参数

2).关键说明:

·每绘制一个子图表都要调用一次subplot函数
·绘制区域的位置编号:plt.subplot(2, 2, 1),前两个参数指定的是一个画布被分割成的行数和列数,后一个参数指定的是当前绘制区域的位置编号,编号的规则是行优先
·如果行列的值都小于10,可简写成plt.subplot(221)

3).示例:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_excel('F:\\Note\\清单.xlsx', sheet_name='Sheet2')
print(df)

# 设置画布
fig = plt.figure(figsize=(6, 4), facecolor='white')

plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码
plt.rcParams['axes.unicode_minus'] = False  # 解决负号不显示的问题

# X,Y轴刻度线的显示方向
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'

# 绘制多子图中的折线图
plt.subplot(2, 2, 1)
plt.plot(df['姓名'], df['语文'], color='c', linestyle='-', marker='o', mfc='w')

# 设置网格线
plt.grid(color='0.5', linestyle='--', linewidth=1)

# 设置x,y轴坐标
plt.xlabel('姓名')
plt.ylabel('语文')

# 设置坐标轴刻度
plt.yticks(range(0, 150, 15))

# 设置标题和图例
plt.title('学生成绩统计图')

# 显示图例
plt.legend(['语文'], loc='upper right')

# 绘制多子图中的饼形图
plt.subplot(2, 2, 2)
x_lable = df['姓名']
explode = [0, 0, 0, 0, 0, 0.1]
plt.pie(df['语文'] / 150, labels=x_lable, explode=explode, labeldistance=1.1, autopct='%.2f%%', startangle=90,
        shadow=True,
        radius=0.8, center=(0, 0), textprops={'fontsize': 9, 'color': 'k'}, pctdistance=0.6)

# 设置标题和图例
plt.title('学生成绩统计图')

# 绘制多子图中的柱形图
plt.subplot(2, 1, 2)
plt.bar(df['姓名'], df['语文'], width=0.5, color='orange')

# 设置x,y轴坐标
plt.xlabel('姓名')
plt.ylabel('语文')

# 设置坐标轴刻度
plt.yticks(range(0, 150, 15))

# 设置标题和图例
plt.title('学生成绩统计图')

# 显示图例
plt.legend(['语文'], loc='upper right')

# 调整图表与画布边缘间距
plt.subplots_adjust(left=0.15, bottom=0.15, right=0.9, top=0.9)

# 坐标轴的刻度线向内显示还是向外显示
plt.tick_params(left=True, bottom=True, right=False, top=False)

# 显示图像
plt.show()

结果展示:
在这里插入图片描述

2.matplotlib.pyplot.subplots 函数

1).语法:

matplotlib.pyplot.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, squeeze=True,width_ratios=None, height_ratios=None,subplot_kw=None, gridspec_kw=None, **fig_kw)

参数说明:
nrows,ncols:将画布分成几行几列
sharex,sharey:表示坐标轴的属性是否相同
subplot_kw:把字典的关键字传递给add_subplot来创建每个子图
gridspec_kw:把字典的关键字传递给GridSpec构造函数创建网格区域
fig_kw:把所有详细的关键字参数传给figure

2).示例:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_excel('F:\\Note\\清单.xlsx', sheet_name='Sheet2')
print(df)

# 设置画布
fig, axes = plt.subplots(2, 2)

plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码
plt.rcParams['axes.unicode_minus'] = False  # 解决负号不显示的问题

# X,Y轴刻度线的显示方向
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'

# 绘制多子图中的折线图
axes[0, 0].plot(df['姓名'], df['语文'], color='c', linestyle='-', marker='o', mfc='w')

# 设置网格线
axes[0, 0].grid(color='0.5', linestyle='--', linewidth=1)

# 设置x,y轴坐标
axes[0, 0].set_xlabel('姓名')
axes[0, 0].set_ylabel('语文')

# 设置坐标轴刻度
axes[0, 0].set_yticks(range(0, 150, 15))

# 设置标题和图例
axes[0, 0].set_title('学生成绩统计图')

axes[0, 0].legend(['语文'], loc='upper right')  # 添加图例


# 绘制多子图中的散点图
axes[0, 1].scatter(df['姓名'], df['语文'], color='r')

# 设置网格线
axes[0, 1].grid(color='0.5', linestyle='--', linewidth=1)

# 设置x,y轴坐标
axes[0, 1].set_xlabel('姓名')
axes[0, 1].set_ylabel('语文')

# 设置坐标轴刻度
axes[0, 1].set_yticks(range(0, 150, 15))

# 设置标题和图例
axes[0, 1].set_title('学生成绩统计图')

axes[0, 1].legend(['语文'], loc='upper right')  # 添加图例

# 绘制多子图中的饼形图
x_lable = df['姓名']
explode = [0, 0, 0, 0, 0, 0.1]
axes[1, 0].pie(df['语文'] / 150, labels=x_lable, explode=explode, labeldistance=1.1, autopct='%.2f%%', startangle=90,
               shadow=True,
               radius=0.8, center=(0, 0), textprops={'fontsize': 9, 'color': 'k'}, pctdistance=0.6)

# 设置标题和图例
axes[1, 0].set_title('学生成绩统计图')


# 绘制多子图中的柱形图
axes[1, 1].bar(df['姓名'], df['语文'], width=0.5, color='orange')

# 设置x,y轴坐标
axes[1, 1].set_xlabel('姓名')
axes[1, 1].set_ylabel('语文')

# 设置坐标轴刻度
axes[1, 1].set_yticks(range(0, 150, 15))

# 设置标题和图例
axes[1, 1].set_title('学生成绩统计图')

axes[1, 1].legend(['语文'], loc='upper right')  # 添加图例

# 调整图表与画布边缘间距
plt.subplots_adjust(left=0.15, bottom=0.15, right=0.9, top=0.9)

# 坐标轴的刻度线向内显示还是向外显示
plt.tick_params(left=True, bottom=True, right=False, top=False)

# 显示图像
plt.show()

结果展示:
在这里插入图片描述

3.matplotlib.pyplot.add_subplot 函数

1).语法:

matplotlib.pyplot.add_subplot(nrows, ncols, index, **kwargs)

参数说明:
nrows,ncols:将画布分成几行几列
index:索引index从左上角开始,向右边递增

2).示例:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_excel('F:\\Note\\清单.xlsx', sheet_name='Sheet2')
print(df)

# 设置画布
fig = plt.figure(figsize=(6, 4), facecolor='white')

plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码
plt.rcParams['axes.unicode_minus'] = False  # 解决负号不显示的问题

# X,Y轴刻度线的显示方向
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'

# 绘制多子图中的折线图
fig.add_subplot(2, 2, 1)
plt.plot(df['姓名'], df['语文'], color='c', linestyle='-', marker='o', mfc='w')

# 设置网格线
plt.grid(color='0.5', linestyle='--', linewidth=1)

# 设置x,y轴坐标
plt.xlabel('姓名')
plt.ylabel('语文')

# 设置坐标轴刻度
plt.yticks(range(0, 150, 15))

# 设置标题和图例
plt.title('学生成绩统计图')

#设置图例
plt.legend(['语文'], loc='upper right')


# 绘制多子图中的散点图
fig.add_subplot(2, 2, 2)
plt.scatter(df['姓名'], df['语文'], color='r')

# 设置网格线
plt.grid(color='0.5', linestyle='--', linewidth=1)

# 设置x,y轴坐标
plt.xlabel('姓名')
plt.ylabel('语文')

# 设置坐标轴刻度
plt.yticks(range(0, 150, 15))

# 设置标题和图例
plt.title('学生成绩统计图')

#设置图例
plt.legend(['语文'], loc='upper right')

# 绘制多子图中的柱形图
fig.add_subplot(2, 1, 2)
plt.bar(df['姓名'], df['语文'], width=0.5, color='orange')

# 设置x,y轴坐标
plt.xlabel('姓名')
plt.ylabel('语文')

# 设置坐标轴刻度
plt.yticks(range(0, 150, 15))

# 设置标题和图例
plt.title('学生成绩统计图')

#设置图例
plt.legend(['语文'], loc='upper right')

# 调整图表与画布边缘间距
plt.subplots_adjust(left=0.15, bottom=0.15, right=0.9, top=0.9)

# 坐标轴的刻度线向内显示还是向外显示
plt.tick_params(left=True, bottom=True, right=False, top=False)

# 显示图像
plt.show()

结果展示:
在这里插入图片描述

4.图标的保存 (matplotlib.pyplot.savefig)

1).将图表保存为JPEG,TIFF或PNG格式的图片
2).保存代码[ plt.savefig(“D:\Result.png”) ]必须在图表预览[ plt.show() ]前,否则保存后的图片是白色的,没有任何图表

注意:代码中所涉及到的函数和参数,在图表的常用设置1 和 图表的常用设置2 有所介绍

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

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

相关文章

难受啊,139天备战字节跳动,一个疏忽让我前功尽弃...

面试是走的内推途径,因为内推的简历通过率远高于其他方式;我的内推的途径有:联系我在字节跳动工作的一个大学学长。 在线面试,有个线上文本编辑器,类似leetcode那种,可以在线编程。然而有点紧张,视频面试网…

Excel·VBA文件重命名

目录获取文件夹下所有文件名获取文件夹下所有文件名并重命名简体/繁体文件名重命名获取文件夹下所有文件名 Sub 测试代码()Dim i&, j&file_path "E:\测试\重命名"With CreateObject("Scripting.FileSystemObject")For Each f In .GetFolder(file…

字节面试官:Rocketmq如何测试?看看我的回答能拿几分?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、…

磨金石教育兴趣技能分享||分享摄影中的“留白”艺术

老子讲:“虚实相生,有无相形”,有与无相对相衬。一幅画的留白可以看出画家胸中的沟壑,也可以看出作品境界的高下。 从某种层面上来讲,摄影也是作画的艺术,一张艺术感高的照片,也需要懂得留白。…

非零基础自学Golang 第2章 安装和运行Go 2.3 在Linux 下安装Go 2.4 在Mac OS 下安装Go

非零基础自学Golang 文章目录非零基础自学Golang第2章 安装和运行Go2.3 在Linux 下安装Go2.4 在Mac OS 下安装Go第2章 安装和运行Go 2.3 在Linux 下安装Go 由于Linux有众多发行版本,笔者这里以 CentOS 7作为示例进行安装介绍,其他发行版本请参考相关发…

C++ Reference: Standard C++ Library reference: Containers: map: cbegin

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/cbegin/ 公有成员函数 <map> std::map::cbegin const_iterator cbegin() const noexcept;返回指向开始的const_iterator 返回指向容器第一个元素的const_iterator。 const_iterator是指向const内容的…

带你领略python魔法~免费复制文档数据

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~ 我们百度搜索一些东西得时候&#xff0c;经常找到文档里面 然后就会发现需要充值才能复制&#xff01;怎么可以不花钱也保存呢&#xff1f; 今天就分享给大家一个python获取文档数据得方法 环境使用: python 3.8 pycharm…

DolphinScheduler 发布 3.0.3 版本,重点修复 6 个 Bug

点亮 ⭐️ Star 照亮开源之路https://github.com/apache/dolphinscheduler近日&#xff0c;Apache DolphinScheduler 发布了 3.0.3 版本。此版本主要基于 3.0.2 版本进行了 Bug 修复&#xff0c;共计修复 6 个 Bug&#xff0c;以及 3 处文档修改。其中的较为重要的 Bug fix 为…

外汇天眼:WTI原油自低位累计反弹9%!欧佩克呼吁“警惕和谨慎”

美国CPI增速创近一年来新低&#xff0c;美元指数失守104.0 周三&#xff08;12月13日&#xff09;公布的美国11月CPI同比增长7.1%&#xff0c;不及预期增长7.3%&#xff0c;前值7.7%&#xff1b;美国11月CPI环比增长0.1%&#xff0c;不及预期增长0.3%&#xff0c;前值0.4%。 从…

专访AliceBob的CEO兼联合创始人:深入探知猫态量子比特

&#xff08;图片来源&#xff1a;网络&#xff09; Alice&Bob公司是一家使用cat量子比特制造容错量子计算机的公司。近日&#xff0c;Alice&Bob的CEO兼联合创始人Thau Peronnin&#xff08;以下简称T&#xff09;接受了记者Yuval Boger&#xff08;以下简称Y&#xff…

Java#37(反射)

目录 一.反射的作用和关键 二. 反射获取对象 1.反射获取类对象 2.反射获取构造器对象 3.反射获取成员变量对象 4. 反射获取方法对象 5.用反射绕过编译阶段为集合添加数据 反射做通用框架 一.反射的作用和关键 作用: 反射是在运行时获取类的字节码文件对象: 然后可以解…

未能加载文件或程序集XXX.dll,程序启动失败的解决方案

之前在VS2019上下载一个项目&#xff0c;运行后就报错&#xff0c;弹出 出错&#xff1a;未能加载文件或程序集XXX.dll 我们选中该dll&#xff0c;右键&#xff0c;属性&#xff0c;发现 该dll被锁定 点击“解决锁定”即可解决。 为了一劳永逸解决此问题&#xff0c;后到微软…

【头歌C语言程序与设计】结构体共用体枚举类型

目录 写在前面 正文 第1关&#xff1a;结构体 第2关&#xff1a;共用体 第3关&#xff1a;枚举类型 写在最后 写在前面 本文代码是我自己所作&#xff0c;本人水平有限&#xff0c;可能部分代码看着不够简练&#xff0c;运行效率不高,但都能运行成功。另外&#xff0c;如…

C++ 智能指针

目录 为什么需要智能指针&#xff1f; RAII 智能指针的原理 C智能指针的历史 智能指针 auto_ptr unique_ptr shared_ptr shared_ptr 引用计数解决智能指针拷贝问题 shared_ptr 循环引用问题 智能指针删除器 weak_ptr 为什么需要智能指针&#xff1f; 1. 我们在很多…

基于 SSM 的 CRM 客户管理系统

1&#xff1a;通过点击【登录】按钮&#xff0c;获取登录的接口地址 2&#xff1a;在UserLoginController类中&#xff0c;增加登录接口 3&#xff1a;首先判断用户名是否存在&#xff0c;其次判断匹配是否匹配 4&#xff1a;处理session问题 代码如下&#xff1a; UserLo…

java计算机毕业设计ssm智能会议室管理系统0v396(附源码、数据库)

java计算机毕业设计ssm智能会议室管理系统0v396&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xf…

TAPD新增需求自动通知飞书

【实现效果&#xff1a;】TAPD新增需求/缺陷&#xff0c;可以自动通知飞书机器人并通知相关人员&#xff0c;让相关人员可以及时关注到新增需求/缺陷并及时处理。 【流程配置】 第一步&#xff1a;打开腾讯云HiFlow模版中心&#xff0c;搜索打开“TAPD需求/项目更新实时通知飞…

C# !(null包容)运算符的使用

总目录 文章目录总目录前言一、!(null包容&#xff09;运算符是什么&#xff1f;二、!(null包容&#xff09;运算符如何使用&#xff1f;1.使用2.扩展-预处理器指令启用或关闭null检查总结前言 本文主要讲解&#xff01;&#xff08;null包容&#xff09;运算符的使用&#xf…

艾美捷科研专用西妥昔单抗Cetuximab相关介绍

西妥昔单抗&#xff08;Cetuximab&#xff09;&#xff0c;商品名尔必得舒&#xff08;Erbitux&#xff09;&#xff0c;是美商英克隆公司和美商百时美施贵宝的专-利药。西妥昔单抗是一种对抗表皮生长因子受体&#xff08;EGFR&#xff09;的单克隆抗体&#xff0c;经美国食品药…

MySQL表的增删查改(下)

作者&#xff1a;~小明学编程 文章专栏&#xff1a;MySQL 格言&#xff1a;目之所及皆为回忆&#xff0c;心之所想皆为过往 今天给大家分享的是增删查改中的一些比较核心的东西同时也是难点&#xff0c;希望能给大家带来一些帮助吧。 目录 数据库的约束 NULL约束 Unique的…