首页 > 编程语言 >【Python】在同一图形中更加优雅地绘制多个子图

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

时间:2023-06-18 19:33:00浏览次数:56  
标签:subplot Plot Python 代码 子图 优雅 df mosaic

1. 引言

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

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

2. Mosaic库

为了更加便捷地实现在图一图像中绘制多个子图,这里我强烈安利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】在同一图形中更加优雅地绘制多个子图_python_02

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】在同一图形中更加优雅地绘制多个子图_python_03

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】在同一图形中更加优雅地绘制多个子图_python_04

什么?你希望对每个子图添加一个标题。由于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】在同一图形中更加优雅地绘制多个子图_python_05

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

7. 总结

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

您学废了嘛?

标签:subplot,Plot,Python,代码,子图,优雅,df,mosaic
From: https://blog.51cto.com/u_15506603/6509288

相关文章

  • Python编程和数据科学中的数据处理:如何从数据中提取有用的信息和数据
    目录引言数据分析和数据处理是数据科学和人工智能领域的核心话题之一。数据科学家和工程师需要从大量的数据中提取有用的信息和知识,以便更好地理解和预测现实世界中的事件。本文将介绍Python编程和数据科学中的数据处理技术,帮助读者从数据中提取有用的信息和数据。技术原理......
  • Python编程和数据科学中的人工智能:如何创建复杂的智能系统并提高模型性能
    目录1.引言2.技术原理及概念3.实现步骤与流程4.应用示例与代码实现讲解标题:《Python编程和数据科学中的人工智能:如何创建复杂的智能系统并提高模型性能》1.引言人工智能(AI)是一个广泛的领域,涵盖了许多不同的技术和应用。在Python编程和数据科学中,人工智能是一个非常重要......
  • Python编程和数据科学中的大数据分析:如何从大量数据中提取有意义的信息和模式
    目录《Python编程和数据科学中的大数据分析:如何从大量数据中提取有意义的信息和模式》引言大数据时代已经来临,随着互联网和物联网的普及,海量数据的产生和存储已经成为一种普遍的现象。这些数据包含各种各样的信息,如文本、图像、音频和视频等,而大数据分析则是将这些海量数据中提......
  • python常用操作之代码操作大全
    目录列表操作大全(listoperations)字典操作大全(dictionaryoperations)表格操作大全(DataFrameoperations)MySQL操作大全(MySQLoperations)列表操作大全(listoperations)字典操作大全(dictionaryoperations)表格操作大全(DataFrameoperations)MySQL操作大全(MySQLoper......
  • Python和C++之间的主要区别点?
    Python和C++之间的区别可以简洁地概括如下:编程范式:Python是一种解释型、面向对象的动态语言,更注重代码的简洁性和可读性,适合快速开发和原型设计。C++是一种编译型、多范式语言,支持面向对象、过程式和泛型编程,更注重底层的控制和性能优化。语法复杂性:C++具有较为复杂的语法和......
  • Python:zip+dict将两个list列表对象转为dict字典对象
    将两个list列表对象转为dict字典对象代码示例keys=['one','two','three']values=[1,2,3]dct=dict(zip(keys,values))print(dct)#{'one':1,'two':2,'three':3}参考文章Python。将2个列表转换为一个字典对象[重复]......
  • Python学习日志一,初识Python
    一、向python说你好世界(print("Helloworld!!"))二、pycharm插件推荐使用上图这个插件就可以翻译代码里面的英文单词了三、Pycharm常用快捷键ctrl+alt+s:打开软件设置shift+alt+上/下:将当前行代码上移或者下移Ctrl+shift+f10:运行当前代码f6:重命名文件四......
  • Python第三方模块:pymongo模块的用法
    pymongo模块是python操作mongo数据的第三方模块,记录一下常用到的简单用法。首先需要连接数据库:MongoClient():该方法第一个参数是数据库所在地址,第二个参数是数据库所在的端口号authenticate():该方法第一个参数是数据库的账号,第二个参数是数据库的密码frompymongoimpor......
  • python下载文件的三种方法
    Python开发中时长遇到要下载文件的情况,最常用的方法就是通过Http利用urllib或者urllib2模块,此外Python还提供了另外一种方法requests。下面来看看三种方法是如何来下载文件的:方法一:importurllibprint("downloadingwithurllib")url='http://download.redis.io/releases......
  • Python调用外部系统命令
    利用Python调用外部系统命令的方法可以提高编码效率。调用外部系统命令完成后可以通过获取命令执行返回结果码、命令执行的输出结果进行进一步的处理。本文主要描述Python常见的调用外部系统命令的方法,包括os.system()、os.popen()、subprocess.Popen()等。本文分析python调用外......