ggplot2中的箱形图教程及实例

906 阅读4分钟

简介

盒形图是一种有用的可视化技术,可以了解数据集的分布和异常值。在这篇文章中,我们将通过R的ggplot2函数的箱形图教程,这是一个流行的可视化包。我们将首先了解ggplot2函数geom_boxplot()中的boxplot的语法,然后看到各种例子,以便初学者容易理解。

ggplot2中箱形图的语法

在ggplot2中创建箱形图的最小语法是

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

你可以通过添加更多的主题层、实验层等来创建复杂的boxplot,从而轻松地在ggplot2中定制箱型图。

ggplot2中箱形图的例子

加载数据集

在ggplot2的所有例子中,我们将使用Tips数据集,该数据集给出了餐馆中顾客支付的小费信息。

让我们先在数据框df中加载这个数据集,看看其中的一些记录。

In[0]:

library(ggplot2)

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

Out[0]:

总帐小费性别吸烟者时间尺寸
16.991.01女性没有太阳晚餐2
10.341.66男性没有太阳晚餐3
21.013.50男性没有太阳晚餐3
23.683.31男性没有太阳晚餐2
24.593.61女性没有阳光晚餐4
25.294.71男性没有阳光晚餐4

例子1:ggplot2中的基本箱形图

首先,我们将把我们的数据集'df'以及'sex'和'total_bill'作为我们的x和y属性传递给ggplot()。

然后,我们添加第二层geom_boxplot()来创建boxplot,这是相当基本和简约的。

In[1]:

# Basic box plot
ggplot(df, aes(x=sex, y=total_bill)) + 
  geom_boxplot()

Out[1]:

ggplot2 box plot example

例2:ggplot2中的水平箱形图

为了在ggplot2中创建一个水平盒式图,我们使用coord_flip()函数将盒式图旋转90度,如下所示。

In[2]:

ggplot(df, aes(x=sex, y=total_bill)) + 
  geom_boxplot() + coord_flip()

输出[2]:

ggplot2 box plot example

例三:凹槽箱形图

在缺口箱形图中,中位数周围有一个缺口,显示中位数周围的置信区间。

置信区间是一个围绕特定值的范围,在一定的概率下(如95%),应该包含该统计量的真实值(群体值)。

要创建带有缺口的箱形图,只需向geom_boxplot()函数传递参数notch=True

In[3]:

ggplot(df, aes(x=sex, y=total_bill)) + 
  geom_boxplot(notch=TRUE)

Out[3]:

ggplot2 box plot example

例四:改变离群值的形状

你可以通过在geom_boxplot()中使用离群值的各种属性来改变离群值的颜色、形状和大小,如下面的例子中所示。

In[4]:

ggplot(df, aes(x=day, y=total_bill)) + 
  geom_boxplot(outlier.colour="red", outlier.shape=8,
                outlier.size=4)

Out[4]:

ggplot2 box plot example

例5:带点状图的箱形图

我们可以使用函数geom_dotplot()或geom_jitter()在箱形图中添加点(或点)。

In[5]:

ggplot(df, aes(x=sex, y=total_bill)) + 
  geom_boxplot()+ geom_dotplot(binaxis='y', stackdir='center', dotsize=0.5)

Out[5]:

`stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.

ggplot2 boxplot example

例6:根据组别给箱形图添加颜色

为了增加一些美感,我们可以根据它们所代表的组来改变我们的boxplots的颜色。在这里,我们是根据星期几来隔离boxplots的。我们使用填充命令来做这件事。

In[6]:

ggplot(df, aes(x=day, y=total_bill, fill=day)) +
  geom_boxplot()

Out[6]:

ggplot2 boxplot example

例7:用scale_fill_manual()给boxplot应用自定义颜色

对于手动应用自定义颜色到boxplot,可以使用scale_fill_manual来定义调色板,如下所示。

In[7]:

# Use custom color palettes
ggplot(df, aes(x=day, y=total_bill, fill=day)) +
  geom_boxplot()+scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9",'#D43F3A'))

Out[7]:

ggplot2 boxplot example

例8:用scale_fill_brewer()给boxplot应用自定义颜色

ggplot2的boxplot也可以用scale_fill_brewer()通过传递brewer调色板来覆盖。在下面的例子中,使用了Dark2调色板。

In[8]:

ggplot(df, aes(x=day, y=total_bill, fill=day)) +
  geom_boxplot()+scale_fill_brewer(palette="Dark2")

Out[8]:

例9:用scale_fill_grey()对箱形图应用灰度。

如下图所示,可以用 scale_fill_grey()来创建一个灰度箱形图。

In[9]:

ggplot(df, aes(x=day, y=total_bill, fill=day)) +
  geom_boxplot() + scale_fill_grey() + theme_classic()

输出[9]:

例10:为盒式图应用轮廓颜色

为了给方格图的轮廓添加颜色,可以使用颜色参数,如下图所示。

在[10]中:

ggplot(df, aes(x=day, y=total_bill, color=day)) +
    geom_boxplot() +
    theme_classic()

Out[10]:

例11:将图例位置改为顶部

我们可以改变图例的位置,把它放在方便的地方,可以是顶部,也可以是底部,我们甚至可以用 legend.position 选项把它完全删除。

在下面的例子中,图例被放置在顶部。

In[11]:

ggplot(df, aes(x=day, y=total_bill, fill=day)) +
  geom_boxplot() + theme(legend.position="top")+ scale_fill_brewer(palette="YlGnBu")

Out[11]:

在下面的例子中,图例被放置在底部。

在[12]中:

ggplot(df, aes(x=day, y=total_bill, fill=day)) +
  geom_boxplot()+ theme(legend.position="bottom")+scale_fill_brewer(palette="Pastel1")

Out[12]:

ggplot2 boxplot example

In[13]:

ggplot(df, aes(x=day, y=total_bill, fill=day)) +
  geom_boxplot() + theme(legend.position="none")+scale_fill_brewer(palette="Pastel2")

Out[13]:

例12:带有多个组的箱形图

通过在geom_boxplot()中使用aeS的填充选项,也可以在箱形图中添加多个组,如下所示。

In[15]:

ggplot(df, aes(x=sex, y=total_bill)) +
    geom_boxplot(aes(fill =day)) +
    theme_classic()+scale_fill_brewer(palette="Set2")

Out[15]:

ggplot2 boxplot example