Press "Enter" to skip to content

如何使用最少的Python代码创建赛博朋克风格的Seaborn小提琴图

如何轻松增强Seaborn小提琴图的简单教程

作者提供的图像,显示了井内不同岩性的密度变化的赛博朋克Seaborn小提琴图。

小提琴图是一种常见的数据可视化,将箱形图和密度图的功能组合在单个图中。这样可以在一个图中可视化更多的信息。例如,我们可以查看箱形图中的基本统计数据、确定可能的异常值,以及查看数据的分布情况。这可以帮助我们了解数据是否倾斜或包含多峰分布。

在我最新的一系列文章中,我一直在探索使用各种主题(包括赛博朋克风格)改进和增强基本的matplotlib图。这种风格为图表提供了未来主义的霓虹灯外观,只需要几行代码就可以应用于matplotlib和seaborn图形。

如果您想了解更多信息,可以查看下面的文章,了解我如何将其应用于matplotlib图。

将您的matplotlib图形赛博朋克化

通过几行代码使您的matplotlib图形从无聊变得有趣

towardsdatascience.com

在这个简短的教程中,我们将使用基本的Seaborn小提琴图并将其赛博朋克化。

导入库和加载数据

我们将从导入我们在本教程中使用的库开始。

这些库包括用于可视化数据的matplotlibseaborn,用于加载和存储数据的pandas,以及用于将赛博朋克主题应用于seaborn图表的mplcyberpunk

import matplotlib.pyplot as pltimport pandas as pdimport mplcyberpunkimport seaborn as sns

导入所需的库之后,我们需要执行的下一步是加载我们的数据。这可以通过使用pandas的read_csv()函数来完成,然后传递数据文件的位置。

我们将使用的数据是XEEK和Force 2020机器学习竞赛的子集,旨在从测井测量中预测岩性。有关该数据集的更多详细信息可以在本文末尾找到。

df = pd.read_csv('data/Xeek_Well_15-9-15.csv')
作者提供的数据帧,包含15/19–15井的测井测量。

当我们查看数据帧(df)时,我们会得到上面的图像。我们可以看到,我们有一个单独的井的数据,从485m延伸到3200m。

创建Seaborn小提琴图

从数据帧中,我们将使用两列。RHOB列,其中包含堆积密度测量,以及LITH列,其中包含岩性描述。

我们可以调用以下代码来创建基本的小提琴图。

首先,我们将图的大小设置为10 x 5,这将给我们一个相当大的图来查看,然后我们调用sns.violinplot()并传递所需的参数。

plt.figure(figsize=(10,5))sns.violinplot(x='LITH', y='RHOB', data=df)

当我们运行上面的代码时,我们会得到以下的图形。

显示每个岩性中的体积密度(RHOB)变化的基本 seaborn 小提琴图。作者提供的图片。

乍一看,返回的图形看起来不错而且可用,但是我们可以使用 mplcyberpunk 库来改进样式。

将 Cyberpunk 风格应用于 Seaborn 图形

要将 Cyberpunk 风格应用于我们的图形,我们只需要在代码中添加一行额外的代码即可。这行代码使用一个 with 语句,然后调用 plt.style.context,它允许我们将样式应用于正在调用此行下面的图形,而不是更改所有图形的全局样式。

with plt.style.context('cyberpunk'):    plt.figure(figsize=(10,5))    sns.violinplot(x='LITH', y='RHOB', data=df)

当我们运行上面的代码时,我们将得到以下小提琴图,它已经应用了大部分的 cyberpunk 主题。

应用 mplcyberpunk 主题后的 Seaborn 小提琴图。作者提供的图片。

mplcyberpunk 库应该执行的一个过程是更改小提琴的颜色。但在我们的情况中,这并未应用。但是可以轻松地修复它。

我们需要创建一个 Cyberpunk 颜色列表来修复它。这些颜色是从 mplcyberpunk 源代码中提取的,但可以更改为任何您想要的颜色。请记住,如果您要进行 Cyberpunk 风格设计,我们可能会使用鲜艳的霓虹色。

除了创建颜色列表之外,我们还可以按字母顺序排序小提琴的顺序,以便它们按照字母顺序排列。这是一个可选步骤,但是一个很好的步骤,特别是在比较具有相同类别的多个数据集时。

my_pal=['#08F7FE', '#FE53BB', '#F5D300', '#00ff41', 'r', '#9467bd', '#de014f']lith_order = df['LITH'].sort_values().unique()

要将颜色应用于文件,我们可以将 my_pal 传递到小提琴图的调色板参数中。

但是,要将相同的颜色应用于图形的边缘/线条,我们需要访问集合,它们存储小提琴图的所有部分的列表。

在此列表中,每两个连续的项目对应一个小提琴:第一个是小提琴的主体,第二个是迷你箱形图。

因此,我们需要在我们的 for 循环中考虑到这一点。

with plt.style.context('cyberpunk'):    plt.figure(figsize=(15,10))    g=sns.violinplot(x='LITH', y='RHOB', data=df, palette=my_pal,                     order=lith_order)        for i in range(len(g.collections)//2):          # divide by 2 because collections include both violin         # bodies and the mini box plots        g.collections[i*2].set_edgecolor(my_pal[i])        g.collections[i*2].set_alpha(0.8)

当我们运行上面的代码时,我们将得到以下带有 Cyberpunk 小提琴的图形。

井中遇到的不同岩性的 Cyberpunked Seaborn 小提琴图。作者提供的图片。

现在,我们能够控制绘图的线条和颜色,我们可以通过更改填充的 alpha 值使其稍微更亮,并增加 x 和 y 轴标签的大小,对绘图进行最后的微调。

with plt.style.context('cyberpunk'):    plt.figure(figsize=(15,10))        g=sns.violinplot(x='LITH', y='RHOB', data=df, palette=my_pal,                     order=lith_order)    for i in range(len(g.collections)//2):        g.collections[i*2].set_edgecolor(my_pal[i])        g.collections[i*2].set_alpha(0.9)        g.set_ylabel('RHOB\n\n', fontsize=16)    g.set_xlabel('\n\nLithology', fontsize=16)
Cyberpunked seaborn violin plot for different lithologies encountered within a well. Image by the Author.

总结

mplcyberpunk 库提供了一种快速简便的方法,可以将您的绘图从默认样式转换为具有未来派外观的样式。

在创建这样的图形时,始终重要的是考虑您的受众,并确保您尝试传达的信息和故事仍然清晰。

教程中使用的数据集

这是由 Xeek 和 FORCE 2020(Bormann 等人,2020)举办的机器学习竞赛的训练数据集的子集。该数据集已获得知识共享署名4.0国际许可。

完整的数据集可以通过以下链接访问:https://doi.org/10.5281/zenodo.4351155。

感谢阅读。在您离开之前,您应该订阅我的内容,并在您的收件箱中获取我的文章。 您可以在此处执行此操作!

其次,您可以通过注册成为会员来获得完整的小猪AI体验,并支持成千上万的其他作者和我。每月只需支付5美元,您就可以完全访问所有fantastic的小猪AI文章,并有机会通过您的写作赚钱。

如果您使用我的链接进行注册,您将直接为我提供部分费用支持,而不会增加您的费用。如果您这样做,非常感谢您的支持。

Leave a Reply

Your email address will not be published. Required fields are marked *