如何在R中用ggplot2创建一个小提琴图并进行自定义

1,434 阅读8分钟

在这个 数据可视化教程中,我们将学习如何使用ggplot2在R中制作一个小提琴图。现在,有几种可视化数据的技术(例如,见Python相关的帖子 "9种你应该在Python中学习的数据可视化技术"),我们可以在R中使用这些技术来可视化我们的数据。简单地说,小提琴图在同一个图中结合了箱形图和柱状图。

概要

在我们进入如何在R中创建小提琴图的细节之前,我们先来看看你需要什么来遵循这个数据可视化教程。当我们有了我们需要的东西,我们将回答几个问题(例如,了解什么是小提琴图)。在这之后的章节中,我们将进入实际细节。也就是说,我们将学习如何使用ggplot2在R中创建小提琴图。此外,我们还将学习如何定制这些图。例如,你将学习如何水平显示图,根据类别填充颜色,以及添加/改变标签。

要求

首先,你显然需要有一个激活的R的安装。其次,为了使用ggplot2,你需要安装该软件包。安装R包可以通过使用install.packages() 命令来完成。

install.packages("ggplot2)

Code language: CSS (css)

这里值得指出的是,ggplot2是Tidyverse包的一部分。这意味着你可以安装Tidyverse来获得ggplot2和其他许多方便的R包。例如,你可以使用dplyr来重命名R中的某一列删除重复的数据,并计算某一列中出现的次数。在下一节中,我们将得到一些常见问题的答案。

什么是 "小提琴图"?

正如文章前面提到的,小提琴图是一种结合箱形图和直方图的数据可视化方法。这种类型的图将显示数据的分布、中位数、四分位间距(iqr)。iqr和中位数是箱形图中显示的统计信息,而分布则是由直方图显示。

小提琴图显示什么?

小提琴图显示的是数字数据。具体来说,它将揭示数字数据的分布形状和汇总统计。它可以用来探索我们数据集中不同组别或变量的数据。

你如何在R中制作小提琴图?

要在R中制作小提琴图,你可以使用ggplot2和geom_violin()函数。例如,如果我们有一个数据框架dataF,并希望创建一个两组响应时间的小提琴图,你可以使用以下代码:p <- ggplot(anes(Group, RT), data = dataF))

数据实例

在这篇文章中,我们将使用一个心理学实验的假数据。该数据集可以在这里下载,是可以通过使用 OpenSesame创建的Flanker任务等获得的假数据。下面是我们如何使用read.csv() 函数将数据读入R。

data = 'https://raw.githubusercontent.com/marsja/jupyter/master/flanks.csv'

df <- read.csv(data)
head(df)

Code language: R (r)

注意,你可以从CSV文件以外的不同来源获得导入数据。

这里是数据框架的快速概览,我们可以看到其中前6行的列。

First 6 rows of dataframe

如果你已经有了列表中的数据,你可以在R中把列表转换为数据框架。在接下来的代码中,我们将使用dplyr包中的一些整洁的函数:group_by()summarise_all()计算R中的描述性统计

df %>% group_by(TrialType) %>% 
  select(ACC, RT) %>% 
  summarise_all(list(mean = mean,
                     std = sd, 
                     min = min, 
                     max = max))

Code language: R (r)

现在,在上面的代码中,我们首先使用dplyr的group_by将数据按试验类型分组(即TrialType列)。其次,我们还使用dplyr按名称选择列,使用select() 函数。最后,我们使用summarise_all() 函数(也来自dplyr)和list() 。 这里我们计算了平均值、标准差、最小值和最大值。

在下一节,我们将加载ggplot2库,学习如何在R中创建一个简单的小提琴图。

如何用ggplot2在R中制作一个小提琴图

下面是如何用R包ggplot2创建一个小提琴图。

p <- ggplot(df, aes(TrialType, RT))
p + geom_violin()

在上面的代码中,我们首先用ggplot() 函数创建了一个绘图对象。这里我们使用aes() 函数作为输入。此外,我们用分组栏(即TrialType)作为第一个参数,因变量(反应时间)作为第二个参数。在下一行,我们使用geom_violin() 函数。这将反过来创建小提琴图层。下面是我们使用R和ggplot2创建的小提琴图。

violin plot in R+

R 小提琴图:使图形水平化

在下一个例子中,我们将使用coord_flip() 函数来创建一个水平的小提琴图。

p <- ggplot(df, aes(TrialType, RT))
p + geom_violin() + 
  coord_flip()

正如你所看到的,在上面的代码块中,我们只是添加了这个函数,这将导致这个图。

violin plot created in R

在下一节中,我们将继续使用R和ggplot2在boxplot上创建一个小提琴图。

如何在R中创建一个小提琴图:四分位数范围、中位数

下面是我们如何在R中显示一个小提琴图,并通过叠加boxplot增加四分位数范围和中位数。

p <- ggplot(df, aes(TrialType, RT))
p + geom_violin() + geom_boxplot()

violin plots in R

R语言中的小提琴图

正如你所看到的,对以前的代码的唯一补充是我们也使用了geom_boxplot() 函数。然而,创建的小提琴图(见上面的图片)可以更好。例如,如果我们使用宽度参数,我们可以得到一个更好的小提琴图。

p <- ggplot(df, aes(TrialType, RT))
p + geom_violin() + geom_boxplot(width = .2)

Code language: HTML, XML (xml)

Width on boxplot changed

在下一节中,我们将在geom_violin()函数中使用quantiles参数。我们将看到,我们也可以用它来显示第25、50和75的量值,例如。在接下来的例子中,我们将对我们用R创建的小提琴图的颜色和主题进行把玩。

如何在小提琴图中添加量纲

下面是我们如何使用quantiles 参数来为小提琴图添加量纲。

p <- ggplot(df, aes(TrialType, RT))
p + geom_violin(draw_quantiles = c(.25, .50, .75))

Code language: R (r)

如你所见,我们现在在小提琴图中得到了三条线。在下一个例子中,我们将学习如何使用颜色参数来定制我们在R中创建的小提琴图。

如何在R中改变小提琴图的颜色

下面是我们如何在R中改变小提琴图的颜色。

p <- ggplot(df, aes(TrialType, RT, color = TrialType))
p + geom_violin() + geom_boxplot(width = .2)

Code language: HTML, XML (xml)

在上面的代码块中,我们给 aes() 函数添加了一个参数:颜色参数。如果我们希望小提琴图的线条在不同的组中是不同的(即不同的颜色),我们可以使用这个参数。下面是生成的图。

在下一个例子中,我们也要对小提琴图进行填充。这很简单,正如你将看到的,我们只需使用填充参数。

如何在R中填充一个小提琴图

下面是如何在R中改变小提琴图的颜色(或填充)。

p <- ggplot(df, aes(TrialType, RT, fill = TrialType))
p + geom_violin() + geom_boxplot(width = .2)

Code language: HTML, XML (xml)

在上面的代码块中,我们添加了一个参数:fill。此外,我们在这里使用了TrialType(一个分类变量)列,所以我们根据它们属于哪种试验类型来填充小提琴图和箱形图。下面是结果图。

change the filling of violin plot in R

在R中改变小提琴图的标签

下面是我们如何改变我们在R中创建的小提琴图的标签。

p + geom_violin() + geom_boxplot(width = .2) +
  labs(
    title = "Comparison of Response Time by Trial Type",
    x = "Trial Type",
    y = "Response time (ms.)"
  )

Code language: R (r)

在上面的代码块中,我们添加了labs() 函数。在这个函数中,我们使用了几个参数。首先,我们通过使用标题参数添加了一个标题。在接下来的两行中,我们改变了x-和y-标题。当我们想向其他研究人员展示数据(例如,发表我们的结果),而我们的变量(在数据集中)有缩短的名称(如RT)时,这可能很有用。要了解更多关于定制ggplot2图形的信息,请参见《如何用Ggplot2在R中制作散点图》一文。

替代软件包

现在,在结束这篇文章之前,可能值得一提的是,还有很多其他选项(例如vioplot、violinplotter)可以用来在R中创建小提琴图。例如,这里是如何安装并使用violinplotter包创建一个图。

install.packages("violinplotter")
library(violinplotter)
violinplotter(RT ~ TrialType, data = df)

Code language: R (r)

正如你所看到的,在上面的代码块中,我们使用一个公式作为第一个参数(第二个参数是数据框架)。下面是生成的小提琴图。

violin plot in R created with violinplotter package

在上面的图片中,我们在小提琴图中得到了一些更多的信息:每个类别的观察值的数量、标准差、标准误差和95%的置信区间。

总结

在这篇文章中,你已经学会了如何在R中制作小提琴图。首先,你学到了创建小提琴图所需要的东西。其次,你了解了关于这种数据可视化技术的更多信息。其次,你通过几个例子了解了如何使用ggplot2来创建小提琴图。具体来说,你学会了如何水平显示小提琴图,为小提琴图添加一个boxplot,改变颜色和填充图,最后是如何改变图上的标签。希望你已经学到了一些东西。我真的希望你做到了。如果你对这篇博文有任何疑问,请在下面留言。