如何使用Matplotlib Mosaic增强您的可视化
Matplotlib 中我学到的最酷的方法之一
介绍
数据可视化非常重要。我们可以从这句话中发展出很多,但我相信你已经有了“画面”。我相信这不是你第一次听到这个。即使是,我仍然认为这并不意外,对吧?
一张图胜过一千次观察。
如果一幅图像胜过一千个词,那么对于数据科学,我想说一幅图像胜过一千次观察。
无论如何,让我们转向这里的重点。这篇简短文章的目标是向您展示方法 subplot_mosaic()
。这个函数真是太棒了。最近我只是随便浏览和阅读一些与数据科学相关的内容时,就遇到了它。我对它的轻松创造多个图形的方式感到惊讶。
接下来让我们看看如何实现。
要使用的数据将是 Python 中 Seaborn 包中的原生数据集 Tips。
import pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns# 数据df = sns.load_dataset('tips')
马赛克
在马赛克之前,有其他的方法来创建子图。它们并不难,但它们不像 subplot_mosaic()
方法那样灵活。您可以阅读下一篇文章了解我在说什么。
使用 Python 在同一图中绘制多个图形
学习如何在同一 matplotlib 图中绘制多个图形
towardsdatascience.com
马赛克方法给我们带来的最大贡献是灵活性,在非常少的代码中创建许多设计。看看下面的图像:如果我们现在想在 matplotlib 中复制它,我们将使用马赛克函数。
请注意,我们有 3 个图。 图 A 将占据左上角的一个位置。 图 B 将占据底部左侧的一个位置。 图 C 将占据右侧的上部和下部两个位置。因此,现在,我们所要做的就是将其翻译成 Python,你会发现真的很简单。
让我们看看代码。我们首先创建一个图形,然后创建一个马赛克变量。马赛克变量可以采用列表或字符串。我认为使用三个引号的字符串并使用文本“绘制”最终绘图图像的样子会更容易。请注意,代码中使用的 ac bc
与前一个图的顺序和形状相同。通过在右侧两次重复 c
,我告诉 matplotlib 我想要将图 C 放在图形的这两个位置上。其余的代码只是常规的图形创建代码。
如果你查看变量 mosaic
,你会看到这个: {‘a’: <Axes: label=’a’>, ‘c’: <Axes: label=’c’>, ‘b’: <Axes: label=’b’>}
。因此,它创建了一个字典,我们现在只需要指定每个图形要放置的位置。
# 用马赛克绘制图形fig = plt.figure(layout= 'constrained')mosaic = fig.subplot_mosaic(''' ac bc ''')# 绘制图 Amosaic['a'].bar(df.sex, df.tip, color='coral')# 绘制图 Bmosaic['b'].scatter(df.total_bill, df.tip, color='forestgreen')# 绘制图 Cmosaic['c'].boxplot(df.tip, patch_artist=True);
以下是可视化结果。
好的。希望我已经引起了你的注意。
我们可以创建不同的布局。看看这个。
# 使用马赛克图绘制plt.figure(layout= 'constrained', figsize=(12,6))mosaic = fig.subplot_mosaic(''' aaa bcc ''')# 绘制Amosaic['a'].bar(df.day, df.tip, color='coral')# 绘制Bmosaic['b'].boxplot(df.total_bill, patch_artist=True)# 绘制Cmosaic['c'].scatter(df.total_bill, df.tip, color='forestgreen');
另外,这里还有一个更多图形的示例。
# 使用马赛克图绘制plt.figure(layout= 'constrained', figsize=(10,6))mosaic = fig.subplot_mosaic(''' ab ac de ''')# 绘制Amosaic['a'].bar(df.day, df.tip, color='coral')# 绘制Bmosaic['b'].boxplot(df.total_bill, patch_artist=True)# 绘制Cmosaic['c'].scatter(df.total_bill, df.tip, color='forestgreen')# 绘制Dmosaic['d'].scatter(df.tip, df.total_bill, color='purple')# 绘制Emosaic['e'].scatter(df['size'], df.tip, color='gold');
设置标题
但是你可能会问:图表标题呢?
好问题,我想说!让我们学习如何放置它们。
第一个选项是最简单的:我们可以通过添加一行额外的代码为整个图像添加单个标题。
# 为马赛克图添加单个标题plt.suptitle(''' -- P L O T S -- - 左上:按性别求小费总数 - - 左下:按总账单求小费 - - 右侧:小费箱线图 - ''')
或者,我们可能希望为每个图添加一个标题。因此,让我们创建一个循环,遍历每个轴和标题列表中的每个标题,并逐个匹配它们。如果调用mosaic.items()
,我们将看到字典和元组,就像之前展示的一样:(‘a’, <Axes: label=’a’>)
。要设置标题,我们要访问元组中的第二个项Axes
部分,这就是为什么我们在序列中使用ax[1]
的代码片段。
下面是如何完成的。
# 定义标题titles = ['按性别求小费总数', '按总账单求小费', '小费箱线图']# 每个图一个标题for ax, g_title in zip(mosaic.items(), titles): ax[1].set_title(g_title, fontstyle='italic')
这就是结果。
非常好,不是吗?
在您离开之前
我相信在单个图中绘制多个图形可用于比较和演示目的。拥有一个使之变得更容易的方法会带来很大的差异。
记住以下步骤
- 创建一个图形
- 使用
subplot_mosaic()
创建一个mosaic变量,并使用三重引号将您的mosaic“绘制”出来。根据需要在mosaic的相应位置上多次写入每个图形标签。 - 使用
plt.suptitle()
或循环添加标题。
就这些了。
如果您喜欢这篇内容,请关注我获取更多内容。
也可以在领英上找到我。如果您正在考虑订阅小猪AI以阅读我的文章和更多内容,请考虑使用此推荐代码,因为这将激励我继续创作内容。
使用我的推荐链接加入小猪AI – Gustavo Santos
在小猪AI上阅读Gustavo Santos(以及成千上万的其他作家)的每个故事。您的会员费直接支持……
小猪AI.com
参考
matplotlib.pyplot.subplot_mosaic – Matplotlib 3.7.1文档
基于ASCII艺术或嵌套列表构建轴布局。这是构建复杂的GridSpec布局的辅助函数…
matplotlib.org
标记子图 – Matplotlib 3.7.1文档
标记子图相对简单,因为它有所不同,所以Matplotlib没有通用的处理方法…
matplotlib.org