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

小提琴图是一种常见的数据可视化,将箱形图和密度图的功能组合在单个图中。这样可以在一个图中可视化更多的信息。例如,我们可以查看箱形图中的基本统计数据、确定可能的异常值,以及查看数据的分布情况。这可以帮助我们了解数据是否倾斜或包含多峰分布。
在我最新的一系列文章中,我一直在探索使用各种主题(包括赛博朋克风格)改进和增强基本的matplotlib图。这种风格为图表提供了未来主义的霓虹灯外观,只需要几行代码就可以应用于matplotlib和seaborn图形。
如果您想了解更多信息,可以查看下面的文章,了解我如何将其应用于matplotlib图。
将您的matplotlib图形赛博朋克化
通过几行代码使您的matplotlib图形从无聊变得有趣
towardsdatascience.com
在这个简短的教程中,我们将使用基本的Seaborn小提琴图并将其赛博朋克化。
导入库和加载数据
我们将从导入我们在本教程中使用的库开始。
这些库包括用于可视化数据的matplotlib和seaborn,用于加载和存储数据的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')

当我们查看数据帧(df
)时,我们会得到上面的图像。我们可以看到,我们有一个单独的井的数据,从485m延伸到3200m。
创建Seaborn小提琴图
从数据帧中,我们将使用两列。RHOB列,其中包含堆积密度测量,以及LITH列,其中包含岩性描述。
我们可以调用以下代码来创建基本的小提琴图。
首先,我们将图的大小设置为10 x 5,这将给我们一个相当大的图来查看,然后我们调用sns.violinplot()
并传递所需的参数。
plt.figure(figsize=(10,5))sns.violinplot(x='LITH', y='RHOB', data=df)
当我们运行上面的代码时,我们会得到以下的图形。

乍一看,返回的图形看起来不错而且可用,但是我们可以使用 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 库应该执行的一个过程是更改小提琴的颜色。但在我们的情况中,这并未应用。但是可以轻松地修复它。
我们需要创建一个 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 小提琴的图形。

现在,我们能够控制绘图的线条和颜色,我们可以通过更改填充的 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)

总结
mplcyberpunk 库提供了一种快速简便的方法,可以将您的绘图从默认样式转换为具有未来派外观的样式。
在创建这样的图形时,始终重要的是考虑您的受众,并确保您尝试传达的信息和故事仍然清晰。
教程中使用的数据集
这是由 Xeek 和 FORCE 2020(Bormann 等人,2020)举办的机器学习竞赛的训练数据集的子集。该数据集已获得知识共享署名4.0国际许可。
完整的数据集可以通过以下链接访问:https://doi.org/10.5281/zenodo.4351155。
感谢阅读。在您离开之前,您应该订阅我的内容,并在您的收件箱中获取我的文章。 您可以在此处执行此操作!
其次,您可以通过注册成为会员来获得完整的小猪AI体验,并支持成千上万的其他作者和我。每月只需支付5美元,您就可以完全访问所有fantastic的小猪AI文章,并有机会通过您的写作赚钱。
如果您使用我的链接进行注册,您将直接为我提供部分费用支持,而不会增加您的费用。如果您这样做,非常感谢您的支持。