在这个Python数据可视化教程中,我们将学习如何使用Matplotlib和Seaborn创建一个小提琴图。现在,有几种数据可视化的技术我们可以进行。小提琴图是结合了箱形图和直方图的。在下一节中,你将得到本博文内容的简要概述。
概要
在我们进入如何在Python中创建小提琴图的细节之前,我们先看一下遵循这个Python数据可视化教程需要什么。当我们有了我们所需要的东西,我们将回答几个问题(例如,学习什么是小提琴图)。在接下来的章节中,我们将进入实践部分。也就是说,我们将学习如何使用1)Matplotlib和2)Seaborn来创建Python中的小提琴图。
要求
首先,你需要安装Python 3来学习这个帖子。其次,为了使用Matplotlib和Seaborn,你需要安装这两个优秀的Python软件包。现在,你可以使用Pip和conda来安装Python软件包。后者如果你有Anaconda(或Miniconda)的Python发行版。注意,Seaborn需要安装Matplotlib,所以如果你,比如说,想尝试用Python创建小提琴图的两个软件包,你可以输入pip install seaborn 。这将安装Seaborn和Matplotlib以及其他依赖项(例如NumPy和SciPy)。哦,我们也要用Pandas来读取例子的数据。当然,Pandas也可以用pip来安装。
什么是小提琴图?
如前所述,小提琴图是一种数据可视化技术,它结合了箱形图和柱状图。因此,这种类型的图将向我们展示数据的分布、中位数、四分位数范围(iqr)。具体来说,iqr和中位数是箱形图中显示的统计信息,而分布是由直方图显示的。
小提琴图显示什么?
小提琴图显示的是数字数据。具体来说,它将揭示数字数据的分布形状和汇总统计。它可以用来探索我们数据集中不同组别或变量的数据。
数据实例
在这篇文章中,我们将使用一个假的数据集。这个数据集可以在这里下载,是一个用OpenSesame创建的Flanker任务的数据。当然,这个实验从来没有实际运行过以收集当前的数据。下面是我们如何用Pandas读取CSV文件。
import pandas as pd
data = 'https://raw.githubusercontent.com/marsja/jupyter/master/flanks.csv'
df = pd.read_csv(data, index_col=0)
df.head()
Code language: Python (python)
示例数据
现在,我们可以在Python中使用Pandas计算描述性统计,describe() 。
df.loc[:, 'TrialType':'ACC'].groupby(by='TrialType').describe()
Code language: Python (python)
描述性统计
现在,在上面的代码中,我们用loc对Pandas的数据框架进行了切片。这是因为我们并不想计算SubID的汇总统计。此外,我们用Pandas groupby按条件(即 "TrialType")对数据进行分组。现在我们有了一些数据,我们将继续探索这些数据,使用1)Matplotlib和2)Seaborn创建一个小提琴图。
如何用Matplotlib在Python中制作一个小提琴图
下面是如何用Python包Matplotlib创建小提琴图。
import matplotlib.pyplot as plt
plt.violinplot(df['RT'])
Code language: Python (python)
用Matplotlib创建的Violin图
在上面的代码中,我们使用了violinplot() 方法,并将数据框架作为唯一的参数。此外,我们用括号只选择了响应时间(即 "RT "列)。现在,我们知道在数据集中有两个条件,因此,我们应该为每个条件创建一个小提琴图。在下一个例子中,我们将对数据进行分组,并使用matplotlib为每个条件创建小提琴图。
用Matplotlib在Python中绘制分组小提琴图
为不同条件(分组)创建小提琴图的一种方法是对数据进行子集。
# Subsetting using Pandas query():
congruent = df.query('TrialType == "congruent"')['RT']
incongruent = df.query('TrialType == "incongruent"')['RT']
fig, ax = plt.subplots()
inc = ax.violinplot(incongruent)
con = ax.violinplot(congruent)
fig.tight_layout()
Code language: Python (python)
现在我们可以看到,这些分布有一些重叠,但它们似乎有点不同。此外,我们可以看到,iqr有点不同。特别是,顶部的情况。然而,我们并不真正知道哪种颜色代表哪种。然而,从前面的描述性统计来看,我们可以假设蓝色的那个是不协调的。请注意,我们也知道这一点,因为那是我们创建的第一个。
我们可以通过使用一些更多的方法使这个图更容易阅读。在下一个代码块中,我们将创建一个数据列表,然后给绘图添加ticks标签,以及给绘图设置(两个)ticks。
# Combine data
plot_data = list([incongruent, congruent])
fig, ax = plt.subplots()
xticklabels = ['Incongruent', 'Congruent']
ax.set_xticks([1, 2])
ax.set_xticklabels(xticklabels)
ax.violinplot(plot_data)
Code language: Python (python)
注意我们现在得到的是并排的小提琴图。在下一个例子中,我们将使用showmedians 参数将中位数添加到图中。
在用Matplotlib创建的小提琴图中显示中位数
下面是我们如何在用Python库matplotlib创建的小提琴图中显示中位数。
fig, ax = plt.subplots()
xticklabels = ['Incongruent', 'Congruent']
ax.set_xticks([1, 2])
ax.set_xticklabels(xticklabels)
ax.violinplot(plot_data, showmedians=True)
Code language: Python (python)
在下一节中,我们将开始与Seaborn合作,在Python中创建一个小提琴图。这个包是作为Matplotlib的一个包装器建立的,使用起来比较容易。首先,我们将从创建一个简单的小提琴图开始(与使用Matplotlib的第一个例子相同)。其次,我们也将创建分组的小提琴图。
如何用Seaborn在Python中创建一个小提琴图
下面是我们如何用Seaborn在Python中创建一个小提琴图。
import seaborn as sns
sns.violinplot(y='RT', data=df)
Code language: JavaScript (javascript)
在上面的代码块中,我们将seaborn导入为sns。这使我们能够使用一系列的方法,在这种情况下,我们用Seaborn创建了一个小提琴图。注意到我们如何将第一个参数设置为因变量,第二个参数设置为我们的Pandas数据框架。
同样,我们知道有两个条件,因此,在下一个例子中,我们将使用x 参数,为每组(即条件)创建小提琴图。
使用Seaborn在Python中绘制分组小提琴图
为了用Seaborn在Python中创建一个分组小提琴图,我们可以使用x 参数。
sns.violinplot(y='RT', x="TrialType",
data=df)
Code language: Python (python)

小提琴壶
现在,与我们用Matplotlib创建的小提琴图相比,这个小提琴图更容易阅读。我们得到了一个小提琴图,每个组/条件的小提琴图都是并排的,有轴标签。所有这些都是通过使用单一的Python元代码实现的。如果我们有更多的类别,我们也可以使用split 参数来获得每个类别的KDEs。让我们在下一节看看我们如何做。
Seaborn中的分组小提琴图与拆分后的小提琴图
下面是我们如何使用split 参数,并将其设置为True ,以获得一个类别中每一级的KDE。
sns.violinplot(y='RT', x="TrialType", split=True, hue='ACC',
data=df)
Code language: Python (python)
在下一个也是最后一个例子中,我们将用Seaborn和orient 参数在Python中创建一个水平小提琴图。
用Seaborn在Python中绘制水平小提琴图
下面是我们如何使用orient 参数来获得Seaborn的水平小提琴图。
sns.violinplot(y='TrialType', x="RT", orient='h',
data=df)
Code language: Python (python)
水平小提琴图
注意我们是如何翻转y 和x 参数的。也就是说,我们现在把因变量("RT")作为x 参数。如果我们想保存一个图,不管是用Matplotlib还是Seaborn创建的,我们可能想改变Seaborn图的大小,添加或改变标题和标签。这里有一个自定义Seaborn小提琴图的代码例子。
import seaborn as sns
import matplotlib.pyplot as plt
fig = plt.gcf()
# Change seaborn plot size
fig.set_size_inches(10, 8)
# Increase font size
sns.set(font_scale=1.5)
# Create the violin plot
sns.violinplot(y='RT', x='TrialType',
data=df)
# Change Axis labels:
plt.xlabel('Condition')
plt.ylabel('Response Time (MSec)')
plt.title('Violin Plot Created in Python')
Code language: Python (python)
在上面的代码块中,我们有一个在Python中使用Seaborn和Matplotlib创建小提琴图的完整工作实例。现在,我们开始导入所需的包。之后,我们用plt.gcf()创建一个新图。在接下来的几行代码中,我们改变了1)图的大小,和2)字体。现在,我们正在创建小提琴图,然后,我们改变x轴和y轴的标签。最后,标题被添加到图中。
结语
在这篇文章中,你已经学会了如何使用Matplotlib和Seaborn包在Python中制作小提琴图。首先,你了解了什么是小提琴图,然后,如何用1)Matplotlib和2)Seaborn在Python中创建单一和分组的小提琴图。









