ggplot2中的小提琴图教程及实例

1,259 阅读4分钟

简介

在本教程中,我们将向你展示如何使用ggplot2在R中制作一个小提琴图,ggplot2是一个流行的、易于使用的软件包,用于在R中创建令人惊叹的图形和可视化效果。

ggplot2中的小提琴图的语法

在ggplot2中,生成小提琴图的最小语法是 --

ggplot(, mapping = aes())+ geom_violin()

你可以通过添加更多的层次来进一步定制小提琴图,比如主题、实验室等。

在R中使用ggplot2绘制小提琴图的例子

加载数据集

我们将把'ford.csv'数据集读入一个叫做df的数据框中

In[0]:

df <- read.table("ford.csv",header=TRUE,sep=',') 
options( warn = -1 ) 
head(df)

Out[0]:

模型年份价格传动装置里程数燃料类型mpg发动机尺寸
菲斯塔201712000自动驾驶15944汽油15057.71.0
焦点201814000指南9083汽油版15057.71.0
焦点201713000手动12456汽油15057.71.0
菲斯塔201917500手动10460汽油14540.31.5
菲斯塔201916500自动挡1482汽油14548.71.0
菲斯塔201510500手动挡35432汽油14547.91.6

加载ggplot2

首先,让我们加载ggplot2库,如下所示。

在[1]中:

library(ggplot2)

例子1 - ggplot2中的基本小提琴图

在下面的例子中,我们使用geom_violin()在ggplot2中绘制最基本的小提琴图,通过传递数据集以及x和y的属性映射。

In[1]:

# Basic violin plot 
ggplot(df, aes(x=transmission, y=price)) + geom_violin()

输出[1]:

Violin Plot ggplot2 Example

例2--ggplot2中的水平小提琴图

我们可以通过使用coord_flip()层在ggplot2中制作一个水平小提琴图。在下面的例子中,我们将小提琴图(我们在上一个例子中创建的)翻转为水平图。

In[2]:

ggplot(df, aes(x=transmission, y=price)) + geom_violin() + coord_flip()

输出[2]:

Horizontal Violin Plot ggplot2 Example

例3--带Bowxplot的小提琴图

有时,在小提琴图中加入一个膨胀图是很有用的,可以清楚地了解数据的分布和它的汇总统计。为了达到这个目的,我们可以简单地在geom_ violin()中加入一层geom_boxplot()

In[3]:

ggplot(df, aes(x=transmission, y=price)) +  geom_violin()+ geom_boxplot()

Out[3]:

Violin Plot with Boxplot ggplot2 Example

例4--用scale_fill_brewer()给小提琴图添加颜色

让我们为我们的Violin图添加颜色,在这个例子中我们使用scale_fill_brewer。

In[4]:

ggplot(df, aes(x=transmission, y=price,fill=transmission))+ geom_violin() + geom_boxplot()+ scale_fill_brewer(palette="YlGnBu")

输出[4]:

Violin Plot ggplot2 Example

例5 - 使用scale_fill_manual()为Violin图添加手动颜色

我们也可以用scale_fill_manual()为小提琴图手动分配颜色,如下所示。

In[5]:

ggplot(df, aes(x=transmission, y=price,fill=fuelType)) + geom_violin() + scale_fill_manual(values=c("orange", "yellow", "brown"))

Out[5]:

例6--为小提琴图添加主题

现在让我们用不同的主题来定制我们的小提琴图,为此我们将实现 theme_void() 和 theme_dark() 函数

In[6]:

ggplot(df, aes(x=transmission, y=price,fill=fuelType)) + geom_violin() +
theme_void()

输出[6]:

使用黑暗主题。

在[7]中:

ggplot(df, aes(x=transmission, y=price,fill=fuelType)) + geom_violin() +
theme_dark()

Out[7]:

例7--为小提琴图添加量纲

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

In[8]:

ggplot(df, aes(x=transmission, y=price,fill=fuelType))+ geom_violin(draw_quantiles = c(.25, .50, .75))+scale_fill_brewer(palette="Dark2")

输出[8]:

例8--绘制stat_summary图

现在,让我们使用函数 stat_summary() 可以用来在小提琴图上添加均值/中值点等。

在 [9]:

ggplot(df, aes(x=transmission, y=price,fill=transmission))+
  geom_violin() + 
  stat_summary(fun = "mean",
               geom = "point",
               color = "red",size=3) +scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"))

输出[9]:

使用横杠而不是点来显示平均值

在[10]中:

ggplot(df, aes(x=transmission, y=price,fill=transmission)) +
  geom_violin() + 
  stat_summary(fun = "mean",
               geom = "crossbar",
               color = "green")+ scale_fill_brewer(palette="YlOrBr")

Out[10]:

例9:按组组织

这是一个分组的小提琴图,在我们的数据集中,每一种汽车型号都有一个单独的小提琴图。

在[11]中:

ggplot(head(df,n=30), aes(x=transmission, y=price,fill=model))+
  geom_violin()+ scale_fill_brewer(palette="PuBuGn")

Out[11]: