【Python】在同一图形中更加优雅地绘制多个子图

这篇具有很好参考价值的文章主要介绍了【Python】在同一图形中更加优雅地绘制多个子图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 引言

数据可视化非常重要,有一句俗语叫做一图顶千言,我相信好多小伙伴应该都听说过这句话;即使是有人第一次听到,我想应该也会觉得赞成,这足以说明数据可视化的重要性。我们在前一篇博客中,介绍了如何利用subplot来在一张子图里绘制多个子图,最近我又发现了一种更加优雅地实现,迫不及待地想要和大家分享。

闲话少说,我们直接开始吧!

2. 举个栗子

为了更加便捷地实现在图一图像中绘制多个子图,这里我强烈安利subplot_mosaic()函数,它使得子图的布局更加灵活。我们不妨来直接看以下例子:
【Python】在同一图形中更加优雅地绘制多个子图

请注意,此时我们有3个子图。图A将在左上角占据一个位置;图 B 将在图的左下角占据一个位置;同时图C将在右侧的顶部和底部占据两个位置。现在,我们所要做的就是将其转换为Python实现,您会发现它非常简单。

3. 代码实现

我们使用matplotlib库中的函数subplot_mosaic实现上述功能,代码如下:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# Data
df = sns.load_dataset('tips')
# Plot with Mosaic
fig = plt.figure(layout= 'constrained')
mosaic = fig.subplot_mosaic('''
                            ac
                            bc
                            ''')

# Plot A
mosaic['a'].bar(df.sex, df.tip, color='coral')
# Plot B
mosaic['b'].scatter(df.total_bill, df.tip, color='forestgreen')
# Plot C
mosaic['c'].boxplot(df.tip, patch_artist=True);

运行结果如下:
【Python】在同一图形中更加优雅地绘制多个子图

4. 代码分析

让我们仔细研究一下上述代码,我们首先开始创建一个figure,接着创建一个mosaic变量 , 其中函数subplot_mosaic的入参为字符串。注意,代码中使用ac bc的顺序和形状与上图相同。通过在右侧重复c两次来告诉matplotlib我们希望图c占据图形中的两个位置。其余代码只是常规的单个子图的创建代码。

我们可以打印一下mosaic 变量的值,可以看到如下:
{'a': <Axes: label='a'>, 'c': <Axes: label='c'>, 'b': <Axes: label='b'>}
因此,实质上我们调用subplot_mosaic函数返回了一个字典,剩下的就是需要常规的画出每个对应位置上的子图。

5. 改变布局

如果你看懂了上述代码,那么我们可以轻易的改变上述子图的布局。
代码如下:

# Plot with Mosaic
fig = plt.figure(layout= 'constrained', figsize=(12,6))
mosaic = fig.subplot_mosaic('''
                            aaa
                            bcc
                            ''')

# Plot A
mosaic['a'].bar(df.day, df.tip, color='coral')
# Plot B
mosaic['b'].boxplot(df.total_bill, patch_artist=True)
# Plot C
mosaic['c'].scatter(df.total_bill, df.tip, color='forestgreen');

结果如下:
【Python】在同一图形中更加优雅地绘制多个子图

6. 添加标题

如果我们需要对上述图表添加标题,该如何实现呢?实质上我们可以使用一行额外的代码为整个图像添加一个标题。

# Adding a single title to the mosaic

plt.suptitle('''        -- P L O T S --
                - Top Left: Sum of tips by Sex -
                - Bottom Left: Tip by Total Bill -
                - Right: Boxplot of Tips - ''')

结果如下:
【Python】在同一图形中更加优雅地绘制多个子图
什么?你希望对每个子图添加一个标题。由于mosaic为一个字典,那我们可以创建一个循环,通过遍历想要的key-value来实现。代码如下:

# Define Titles
titles = ['Sum of tips by Sex', 'Tip by Total Bill', 'Boxplot of Tips']

# One title per plot
for ax, g_title in zip(mosaic.items(), titles):
    ax[1].set_title(g_title, fontstyle='italic')

结果如下:
【Python】在同一图形中更加优雅地绘制多个子图

Wow,经过一步步美化,最后呈现的结果果然好看多了。

7. 总结

我相信在单个图形中绘制多个图形有助于对比和提升可视化效果的目的,拥有一种使其更简洁的方法会提升很大的效果,推荐大家多多使用。

您学废了嘛?文章来源地址https://www.toymoban.com/news/detail-500197.html

到了这里,关于【Python】在同一图形中更加优雅地绘制多个子图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    文章传送门 Python 数据可视化 matplotlib之绘制常用图形:折线图、柱状图(条形图)、饼图和直方图 matplotlib之设置坐标:添加坐标轴名字、设置坐标范围、设置主次刻度、坐标轴文字旋转并标出坐标值 matplotlib之增加图形内容:设置图例、设置中文标题、设置网格效果 matplo

    2024年01月18日
    浏览(46)
  • Python常见库matplotlib之多个子图绘图

    第一章 Python常见库matplotlib之画图文字的中文显示 第二章 Python常见库matplotlib之画图中各个模块的含义及修改方式 第三章 Python常见库matplotlib之多个子图绘图 前两章介绍了单张图的绘图操作,这一章介绍下在一张图中画多个图的操作。我们把前一篇的程序稍微改动一下,上一

    2024年02月06日
    浏览(34)
  • 【100天精通Python】Day63:Python可视化_Matplotlib绘制子图,子图网格布局属性设置等示例+代码

     目录 1 基本子图绘制示例 2 子图网格布局 3 调整子图的尺寸 4 多行多列的子图布局 5 子图之间的共享轴 6 绘制多个子图类型 7 实战: 绘制一个大图,里面包含6个不同类别的子图,不均匀布局。 绘制子图(subplots) 是在Matplotlib中创建多个子图的常见任务。通过子图,您可以

    2024年02月05日
    浏览(37)
  • Python数据可视化化第五节(子图的绘制及坐标轴共享)

    matplotlib可以将整个画布规划成等分布局的m n(行 列)的矩阵区域,并按照先行后列的·方式对每个区域进行编号(编号从1开始),之后在选中的某个区域或某些区域中绘制单个‘或多个子图。 使用pyplot的subplot()函数可以规划好的某个区域中绘制单个子图,subplot()函数的语法格

    2024年02月02日
    浏览(33)
  • python绘制子图技巧——plt.subplot和plt.subplots、及坐标轴修改

    偶然发现 python(matplotlib) 中绘制子图有两种方法,一种是 plt.subplot ,另一种是 plt.subplots ,这篇博客说一下这两种方法的区别,用法,以及常用的一些函数。 plt.figure 的作用是定义一个大的图纸,可以设置图纸的大小、分辨率等,例如 plt.plot() 是直接在当前活跃的的axes上面

    2023年04月09日
    浏览(28)
  • Seaborn绘制热力图的子图

    提示:如何绘制三张子图 绘制的时候,会出现如下问题 (1)如何绘制1*3的子图 (2)三个显示条,如何只显示最后一个 提示:下面就展示详细步骤 提示:以下是本篇文章正文内容,下面案例可供参考 Seaborn是一个用于在Python中进行统计数据可视化的库。它是建立在Matplotli

    2024年02月11日
    浏览(27)
  • 数据可视化(六)多个子图及seaborn使用

    1.多个子图绘制 2. 3.seaborn使用,首先安装。如果在pycharm中安装报错,先安装Scipy  

    2024年02月13日
    浏览(27)
  • 如何规范书写sql语句,让代码更加优雅

    1.首先uf-8编码         UTF-8编码是一种针对Unicode的可变长度字符编码,可以表示任何字符,在国际化应用和多语言环境中非常常见。因此,在编写SQL语句时,建议使用UTF-8编码,避免出现乱码等问题。 2.主键int的定义类型应该是bigint 无字符           主键是数据库表中

    2024年02月06日
    浏览(26)
  • 如何在vscode中debug python代码,包括如何优雅地传入多个参数

    Visiul Studio Code, 简称vscode,是一款轻量级代码编辑器,其丰富的扩展程序使得其可以方便地作为任何语言的编辑器。 本文将讲述如何在vscode中对python脚本文件进行debug。 本文主要包括debug的两种方式: 基本debugging(basic debugging):可以解决大部分情况 命令行debugging(command line d

    2024年02月11日
    浏览(21)
  • 【数据分析之道-Matplotlib(三)】Matplotlib 绘制子图

    ✍ 作者简介: i阿极 ,CSDN Python领域新星创作者, 专注于分享python领域知识。 ✍ 本文录入于《数据分析之道》 ,本专栏针对大学生、初级数据分析工程师精心打造,对python基础知识点逐一击破,不断学习,提升自我。 ✍ 订阅后,可以阅读《数据分析之道》中全部文章内容

    2024年02月04日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包