Ggplot2 简明教程

ggplot2 - Quick Guide

ggplot2 - Introduction

ggplot2 是一个 R 包,专门用于数据可视化并提供最佳探索性数据分析。它提供精美的、无忧无虑的图,可以处理细小的细节,例如绘制图例并表示它们。图可以迭代创建并稍后编辑。此包被设计为以分层方式工作,从一个图层开始,该图层显示使用 R 进行探索性数据分析期间收集的原始数据,然后添加标注和统计摘要的图层。

即使是最有经验的 R 用户在创建精美的图形时也需要帮助。这个库是用于在 R 中创建图形的非凡工具,但即使在多年几乎每天使用之后,我们仍然需要参考我们的备忘单。

此包使用称为“图形语法”的深度语法,它由一组可通过多种方式创建的独立组件组成。“图形语法” 是使 ggplot2 非常强大的唯一原因,因为 R 开发人员不局限于其他包中使用的预先指定图形集。语法包含一组简单核心理论和原则。

2005 年,Wilkinson 创建或更确切地说是创立了图形语法的概念,以描述包含在所有统计图形之间的深度特征。它专注于图层原语,包括改编嵌入 R 的功能。

Relationship between “Grammar of Graphics” and R

它告诉用户或开发者,统计图形用于将数据映射到美学属性,如点的颜色、形状、大小,线的颜色、形状、大小和条形图的颜色、形状、大小等涉及的几何对象。图表还可能包含涉及的数据的各种统计转换,这些转换绘制在上述坐标系中。它还包括一个称为“分面”的功能,通常用于针对上述数据集的不同子集创建相同图表。R 包含各种内置数据集。这些独立组件的组合完全构成了一个特定图形。

现在让我们关注可参考语法创建的不同类型的图表 -

Data

如果用户想可视化给定的美学映射集,它描述了数据中的所需变量是如何映射在一起以创建映射美学属性的。

Layers

它由几何元素和所需的统计转换组成。层包括几何对象、用于表示图表中的短数据的几何对象(geom),实际上它们使用点、线、多边形等表示图表。最好的演示是分类和统计观测值,以创建特定直线模型的二维关系的特定直方图。

Scales

缩放用于映射数据空间中的值,这些值用于创建值,无论它们是颜色、大小还是形状。它有助于绘制图例或轴线,需要提供一个逆向映射,使得可以从上述图表中读取原始数据值。

Coordinate System

它描述了如何将数据坐标一起映射到图形的上述平面。它还提供了阅读图表所需的坐标轴和网格线的信息。通常将其用作直角坐标系,其中包括极坐标和地图投影。

Faceting

它包括关于如何将数据分解为所需子集以及以数据倍数显示子集的说明。这也被称为条件化或格状处理。

Theme

它控制显示的细节部分,如字体大小和背景颜色属性。要创建一个具有吸引力的图表,最好总是考虑参考文献。

现在,讨论语法不提供的限制或特征也同样重要 -

  1. 它缺少应该使用的图形的建议或用户感兴趣的建议。

  2. 它不描述交互性,因为它仅包括对静态图形的描述。要创建动态图形,应该应用其他备选方案。

下面提到了使用 ggplot2 创建的简单图形 -

ggplot2 graph

ggplot2 - Installation of R

R 软件包具有各种功能,例如分析统计信息、深入研究地理空间数据或简单创建基本报告。

R 软件包可以定义为以明确格式定义的 R 函数、数据和编译代码。存储软件包的文件夹或目录称为库。

installation of r

如上图所示,libPaths() 是显示位于库中的库的函数,而函数 library 显示存储在库中的软件包。

R 包含许多操作软件包的函数。我们将重点关注三个主要函数,它们被主要使用,它们是:

  1. Installing Package

  2. Loading a Package

  3. Learning about Package

在 R 中安装软件包的函数语法为:

Install.packages(“<package-name>”)

安装软件包的简单演示如下所示。考虑我们需要安装数据可视化库“ggplot2”,使用以下语法:

Install.packages(“ggplot2”)
demonstration of installing

若要加载特定软件包,我们需要遵循下面提到的语法:

Library(<package-name>)

ggplot2 的用法同上,如下所示:

library(“ggplot2”)

输出如下图所示:

snapshot of output

为了理解所需软件包和基本功能的需要,R 提供了帮助函数,该函数提供了已安装软件包的完整详细信息。

以下提及完整句法 -

help(ggplot2)
r documentation

ggplot2 - Default Plot in R

在本章中,我们将重点介绍借助 ggplot2 创建简单图表的工具。我们将使用以下步骤在 R 中创建默认图表。

Inclusion of library and dataset in workspace

将库包含到 R 中。加载所需包。现在我们将重点放在 ggplot2 包上。

# Load ggplot2
library(ggplot2)

我们将使用名为“Iris”的数据集。该数据集包含 50 个实例的 3 个类别,每个类别都属于一种鸢尾花植物。一类线性可分于其他两类;后两类不是线性可分的。

# Read in dataset
data(iris)

下面给出了数据集包括的属性列表 -

inclusion of library and dataset

Using attributes for sample plot

使用 ggplot2 以更简单的方式绘制鸢尾花数据集图表涉及以下语法 -

# Plot
IrisPlot <- ggplot(iris, aes(Sepal.Length, Petal.Length, colour=Species))
   + geom_point()
print(IrisPlot)

第一个参数将数据集作为输入,第二个参数指定数据库中需要绘制的图例和属性。在此示例中,我们使用图例 Species。Geom_point() 表示散点图,将在后面的章节中详细讨论。

生成的输出如下 -

using attributes for sample plot

这里我们可以修改标题、x 标签和 y 标签,这意味着 x 轴和 y 轴标签采用给定的系统格式 -

print(IrisPlot + labs(y="Petal length (cm)", x = "Sepal length (cm)")
   + ggtitle("Petal and sepal length of iris"))
petal and sepal length of iris

ggplot2 - Working with Axes

当我们谈论图表中的坐标轴时,它完全是关于以二维方式表示的 x 和 y 坐标轴。在本章中,我们将重点关注data科学家常用到的两个数据集“Plantgrowth”和“Iris”数据集。

Implementing axes in Iris dataset

我们将使用以下步骤使用 R 的 ggplot2 包处理 x 和 y 轴。

加载库以获取软件包的功能始终很重要。

# Load ggplot
library(ggplot2)

# Read in dataset
data(iris)

Creating the plot points

如前一章所述,我们将创建其中有点的图表。换句话说,它被定义为散点图。

# Plot
p <- ggplot(iris, aes(Sepal.Length, Petal.Length, colour=Species)) + geom_point()
p
creating the plot points

现在让我们了解美学映射“ggplot2”的 aes 的功能。美学映射描述了绘图所需的可变结构以及应该在单个图层格式中管理的数据。

输出如下 −

output of plot points

Highlight and tick marks

如下所示,使用 x 和 y 坐标轴的上述坐标标记图。它包括添加文本、重复文本、突出显示特定区域和添加线段,如下所示 -

# add text
p + annotate("text", x = 6, y = 5, label = "text")

# add repeat
p + annotate("text", x = 4:6, y = 5:7, label = "text")

# highlight an area
p + annotate("rect", xmin = 5, xmax = 7, ymin = 4, ymax = 6, alpha = .5)

# segment
p + annotate("segment", x = 5, xend = 7, y = 4, yend = 5, colour = "black")

为添加文本生成的输出如下 -

generated for adding text

使用已提及的坐标重复特定文本会产生以下输出。该文本由 4 到 6 的 x 坐标和 5 到 7 的 y 坐标生成 −

generated with mentioned co ordinates

下面提供了特定区域输出的分割和突出显示 −

segmentation and highlighting

PlantGrowth Dataset

现在让我们专注于使用名为“Plantgrowth”的其他数据集,如下所示。

调用该库并查看“Plantgrowth”的属性。该数据集包含一个实验的结果,该实验比较在对照和两种不同的处理条件下获得的产量(以植物的干重衡量)。

> PlantGrowth
  weight group
1 4.17 ctrl
2 5.58 ctrl
3 5.18 ctrl
4 6.11 ctrl
5 4.50 ctrl
6 4.61 ctrl
7 5.17 ctrl
8 4.53 ctrl
9 5.33 ctrl
10 5.14 ctrl
11 4.81 trt1
12 4.17 trt1
13 4.41 trt1
14 3.59 trt1
15 5.87 trt1
16 3.83 trt1
17 6.03 trt1

Adding attributes with axes

尝试绘制一个简单的绘图,其中 x 和 y 轴根据以下说明进行绘制 −

> bp <- ggplot(PlantGrowth, aes(x=group, y=weight)) +
+    geom_point()
> bp

下面给出了生成的输出 −

adding attributes with axes

最后,我们可以根据需要使用如下所示的基本函数交换 x 和 y 轴 −

> bp <- ggplot(PlantGrowth, aes(x=group, y=weight)) +
+    geom_point()
> bp
basic function

从本质上讲,我们可以使用具有美学映射的许多属性来使用 ggplot2 处理轴。

ggplot2 - Working with Legends

坐标轴和图例统称为指南。它们允许我们从绘图中读取观察结果,并将它们映射回原始值。图例键和刻度标签都由刻度断点确定。图例和坐标轴根据绘图所需的相应刻度和几何自动生成。

将执行以下步骤来了解 ggplot2 中图例的工作原理 −

Inclusion of package and dataset in workspace

让我们创建相同的绘图来关注使用 ggplot2 生成的图表的图例 −

> # Load ggplot
> library(ggplot2)
>
> # Read in dataset
> data(iris)
>
> # Plot
> p <- ggplot(iris, aes(Sepal.Length, Petal.Length, colour=Species)) + geom_point()
> p
inclusion of package and dataset

如果你观察该绘图,图例创建在最左角,如下所示 −

legends are created

在此,图例包括给定数据集的各种物种类型。

Changing attributes for legends

我们可以借助属性 “legend.position” 来移除图例,并且可以获得适当的输出 −

> # Remove Legend
> p + theme(legend.position="none")
changing attributes for legends

我们还可以使用属性 “element_blank()” 隐藏图例的标题,如下所示 −

> # Hide the legend title
> p + theme(legend.title=element_blank())
element blank

我们还可以根据需要使用图例位置。此属性用于生成准确的绘图图例。

> #Change the legend position
> p + theme(legend.position="top")
>
> p + theme(legend.position="bottom")

Top representation

top representation

Bottom representation

bottom representation

Changing font style of legends

我们可以更改标题的字体样式和字体类型以及图例的其他属性,如下所示 −

> #Change the legend title and text font styles
> # legend title
> p + theme(legend.title = element_text(colour = "blue", size = 10, + face = "bold"))
> # legend labels
> p + theme(legend.text = element_text(colour = "red", size = 8, + face = "bold"))

下面给出了生成的输出 −

changing font style of legends
changing font style of legends1

后续章节将重点介绍不同类型的绘图以及各种背景属性,例如颜色、主题以及每种属性对于数据科学的意义。

ggplot2 - Scatter Plots & Jitter Plots

散点图与折线图类似,通常用于绘制图形。散点图显示一个变量与另一个变量的关系。变量之间的关系称为相关性,它通常用于统计方法。我们将使用名为“Iris”的相同数据集,其中每个变量之间有很大的差异。这是著名的数据集,提供了 50 朵鸢尾花(3 个物种)中萼片长度和宽度以及花瓣长度和宽度的厘米测量值。这些物种分别被称为西伯利亚鸢尾、杂色鸢尾和弗吉尼亚鸢尾。

Creating Basic Scatter Plot

使用“ggplot2”软件包创建散点图需要以下步骤 −

可以执行以下命令来创建基本散点图 −

> # Basic Scatter Plot
> ggplot(iris, aes(Sepal.Length, Petal.Length)) +
+    geom_point()
creating basic scatter plot

Adding attributes

我们可以使用 geom_point() 函数中的一个名为 shape 的属性更改点的形状。

> # Change the shape of points
> ggplot(iris, aes(Sepal.Length, Petal.Length)) +
+    geom_point(shape=1)
adding attributes

我们可以为点添加颜色,添加在所需的散点图中。

> ggplot(iris, aes(Sepal.Length, Petal.Length, colour=Species)) +
+    geom_point(shape=1)
adding attributes with color

在此示例中,我们根据图例中提到的物种创建了颜色。这三个物种在这个提到的图中有着独特的区别。

现在,我们将重点放在建立变量之间的关系上。

> ggplot(iris, aes(Sepal.Length, Petal.Length, colour=Species)) +
+    geom_point(shape=1) +
+    geom_smooth(method=lm)

geom_smooth 函数有助于重叠模式并创建所需变量的模式。

属性方法“lm”提到了需要开发的回归线。

> # Add a regression line
> ggplot(iris, aes(Sepal.Length, Petal.Length, colour=Species)) +
+    geom_point(shape=1) +
+    geom_smooth(method=lm)
geom smooth function

我们还可以添加一条无阴影置信区域的回归线,其语法如下所示:

># Add a regression line but no shaded confidence region
> ggplot(iris, aes(Sepal.Length, Petal.Length, colour=Species)) +
+    geom_point(shape=1) +
+    geom_smooth(method=lm, se=FALSE)
add a regression line graph

阴影区域表示除了置信区域之外的事物。

Jitter Plots

抖动图包含可以描绘散点图的特殊效果。抖动只不过是一个随机值,分配给点以将其分离,如下所示:

> ggplot(mpg, aes(cyl, hwy)) +
+    geom_point() +
+    geom_jitter(aes(colour = class))
jitter plots

ggplot2 - Bar Plots & Histograms

条形图以矩形方式呈现分类数据。条形图可以垂直和水平绘制。高度或长度与图形中表示的值成正比。条形图的 x 轴和 y 轴指定包含在特定数据集中的类别。

直方图是条形图,它用提及数据集分布的清晰图片表示原始数据。

在本章中,我们将借助 ggplot2 重点关注条形图和直方图的创建。

Understanding MPG Dataset

让我们了解将使用的数据集。Mpg 数据集包含美国环保局在以下链接中提供的燃油经济性数据的子集 -

它由 1999 年到 2008 年间每年都发布新版本的车型组成。这被用作汽车流行程度的衡量标准。

执行以下命令来了解数据集所需的属性列表。

> library(ggplot2)

附加包是 ggplot2。

以下对象已被掩盖 by 。GlobalEnv −

mpg

Warning messages

  1. arules 包是在 R 3.5.1 版本下建成的

  2. tuneR 包是在 R 3.5.3 版本下建成的

  3. ggplot2 包是在 R 3.5.3 版本下建成的

understanding mpg dataset

Creating Bar Count Plot

条形计数图可以使用下面提到的绘图创建 −

> # A bar count plot
> p <- ggplot(mpg, aes(x=factor(cyl)))+
+    geom_bar(stat="count")
> p
creating bar count plot

geom_bar() 是用于创建条形图的函数。它获取名为 count 的统计值的属性。

Histogram

直方图计数图可以使用下面提到的绘图创建 −

> # A historgram count plot
> ggplot(data=mpg, aes(x=hwy)) +
+    geom_histogram( col="red",
+       fill="green",
+       alpha = .2,
+       binwidth = 5)

geom_histogram() 包含创建直方图所需的所有属性。在此,它获取 hwy 的属性以及相应的 count。颜色根据要求获取。

histogram

Stacked Bar Chart

条形图和直方图的常规绘图可以如下创建 −

> p <- ggplot(mpg, aes(class))
> p + geom_bar()
> p + geom_bar()
stacked bar chart

此绘图包括条形图中定义的所有类别,以及相应的类。此绘图称为堆叠图。

ggplot2 - Pie Charts

饼图被视为一种圆形统计图,它被分为多个扇形以说明数值比例。在提到的饼图中,每个扇形的弧长与它所代表的数量成正比。弧长表示饼图的度数。饼图的总度数为 360 度。半圆或半饼图包含 180 度。

Creating Pie Charts

在提到的工作区加载软件包,如下所示 −

> # Load modules
> library(ggplot2)
>
> # Source: Frequency table
> df <- as.data.frame(table(mpg$class))
> colnames(df) <- c("class", "freq")
creating pie charts

示例图表可以使用以下命令创建 −

> pie <- ggplot(df, aes(x = "", y=freq, fill = factor(class))) +
+ geom_bar(width = 1, stat = "identity") +
+ theme(axis.line = element_blank(),
+    plot.title = element_text(hjust=0.5)) +
+    labs(fill="class",
+       x=NULL,
+       y=NULL,
+       title="Pie Chart of class",
+       caption="Source: mpg")
> pie

如果您观察输出,图表不会按照如下所示的圆形方式创建 −

sample chart

Creating co-ordinates

让我们执行以下命令来创建所需的饼图,如下所示 −

> pie + coord_polar(theta = "y", start=0)
creating co ordinates

ggplot2 - Marginal Plots

在本章中,我们将讨论边缘图。

Understanding Marginal Plots

边缘图用于评估两个变量之间的关系并检查其分布。当我们谈论创建边缘图时,它们不过是散点图,在相应的 x 轴和 y 轴的边距中包含直方图、箱形图或点图。

以下步骤将用于使用包 “ggExtra” 使用 R 创建边缘图。此包旨在增强 “ggplot2” 包的功能,并包含用于创建成功边缘图的各种函数。

Step 1

(如果您的系统中没有安装此包)使用以下命令安装 “ggExtra” 包以成功执行。

> install.packages("ggExtra")

Step 2

在工作区中包含所需的库以创建边缘图。

> library(ggplot2)
> library(ggExtra)

Step 3

读取我们曾在之前章节中使用过的所需数据集 “mpg”。

> data(mpg)
> head(mpg)
# A tibble: 6 x 11
manufacturer   model  displ   year   cyl   trans      drv   cty   hwy  fl  class
<chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
1 audi         a4     1.8     1999   4     auto(l5)   f     18    29   p   compa~
2 audi         a4     1.8     1999   4     manual(m5) f     21    29   p   compa~
3 audi         a4     2       2008   4     manual(m6) f     20    31   p   compa~
4 audi         a4     2       2008   4     auto(av)   f     21    30   p   compa~
5 audi         a4     2.8     1999   6     auto(l5)   f     16    26   p   compa~
6 audi         a4     2.8     1999   6     manual(m5) f     18    26   p   compa~
>

Step 4

现在让我们使用 “ggplot2” 创建一个简单的图,这将帮助我们理解边缘图的概念。

> #Plot
> g <- ggplot(mpg, aes(cty, hwy)) +
+    geom_count() +
+    geom_smooth(method="lm", se=F)
> g
create simple plot using ggplot2

Relationship between Variables

现在让我们使用 ggMarginal 函数创建边缘图,该函数有助于生成两个属性 “hwy” 和 “cty” 之间的关系。

> ggMarginal(g, type = "histogram", fill="transparent")
> ggMarginal(g, type = "boxplot", fill="transparent")

直方图边缘图的输出如下 -

relationship between variables

箱形边缘图的输出如下 -

box marginal plots

ggplot2 - Bubble Plots & Count Charts

气泡图实际上是气泡图,它基本上是散点图,第三个数值变量用于圆的大小。在这一章中,我们将重点关注条形数量图和直方图数量图的创建。它们被视为气泡图的复制品。

以下步骤用于使用上述软件包创建气泡图和数量图 −

Understanding Dataset

加载相关软件包和所需的数据集,以创建气泡图和数量图。

> # Load ggplot
> library(ggplot2)
>
> # Read in dataset
> data(mpg)
> head(mpg)
# A tibble: 6 x 11
manufacturer  model  displ  year  cyl  trans      drv   cty  hwy  fl  class
<chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
1 audi        a4     1.8    1999  4    auto(l5)   f     18   29   p   compa~
2 audi        a4     1.8    1999  4    manual(m5) f     21   29   p   compa~
3 audi        a4     2      2008  4    manual(m6) f     20   31   p   compa~
4 audi        a4     2      2008  4    auto(av)   f     21   30   p   compa~
5 audi        a4     2.8    1999  6    auto(l5)   f     16   26   p   compa~
6 audi        a4     2.8    1999  6    manual(m5) f     18   26   p   compa~

可以使用以下命令创建条形数量图 −

> # A bar count plot
> p <- ggplot(mpg, aes(x=factor(cyl)))+
+ geom_bar(stat="count")
> p
understanding dataset1

Analysis with Histograms

可以使用以下命令创建直方图数量图 −

> # A historgram count plot
> ggplot(data=mpg, aes(x=hwy)) +
+    geom_histogram( col="red",
+       fill="green",
+       alpha = .2,
+       binwidth = 5)
analysis with histograms

Bubble Charts

现在让我们创建最基本的点图,并增加散点图中所述点的维度。

ggplot(mpg, aes(x=cty, y=hwy, size = pop)) +geom_point(alpha=0.7)
bubble charts

该图描述了制造商的特性,其包含在图例格式中。所表示的值包括“hwy”属性的不同维度。

ggplot2 - Diverging Charts

在前面的章节中,我们查看可以使用“ggplot2”包创建的各种图表类型。现在我们将重点关注不同之处,例如分歧条形图、棒棒糖图等等。首先,我们将开始创建分歧条形图,下面提到了需要遵循的步骤 -

Understanding dataset

加载所需包并在 mpg 数据集中创建名为“car name”的新列。

#Load ggplot
> library(ggplot2)
> # create new column for car names
> mtcars$`car name` <- rownames(mtcars)
> # compute normalized mpg
> mtcars$mpg_z <- round((mtcars$mpg - mean(mtcars$mpg))/sd(mtcars$mpg), 2)
> # above / below avg flag
> mtcars$mpg_type <- ifelse(mtcars$mpg_z < 0, "below", "above")
> # sort
> mtcars <- mtcars[order(mtcars$mpg_z), ]

上述计算涉及为汽车名称创建新列,借助 round 函数计算标准化数据集。我们还可以使用高于和低于平均值标记获取“类型”功能的值。稍后,我们对值进行排序以创建所需数据集。

收到的输出如下 -

diverging charts

将值转换为要素以在特定绘图中保留排序顺序,如下所述 -

> # convert to factor to retain sorted order in plot.
> mtcars$`car name` <- factor(mtcars$`car name`, levels = mtcars$`car name`)

获得的输出如下 -

diverging charts1

Diverging Bar Chart

现在使用被视为所需坐标的提及属性创建分歧条形图。

> # Diverging Barcharts
> ggplot(mtcars, aes(x=`car name`, y=mpg_z, label=mpg_z)) +
+ geom_bar(stat='identity', aes(fill=mpg_type), width=.5) +
+ scale_fill_manual(name="Mileage",
+    labels = c("Above Average", "Below Average"),
+    values = c("above"="#00ba38", "below"="#f8766d")) +
+ labs(subtitle="Normalised mileage from 'mtcars'",
+    title= "Diverging Bars") +
+ coord_flip()

Note - 分歧条形图标记对于某些维度成员指向相对于提及值的上方或下方方向。

以下是分歧条形图的输出,其中我们使用 geom_bar 函数创建条形图 -

diverging bar chart

Diverging Lollipop Chart

使用相同属性和坐标创建分歧棒棒糖图,只需更改要使用的函数,即 geom_segment(),它有助于创建棒棒糖图。

> ggplot(mtcars, aes(x=`car name`, y=mpg_z, label=mpg_z)) +
+ geom_point(stat='identity', fill="black", size=6) +
+ geom_segment(aes(y = 0,
+    x = `car name`,
+    yend = mpg_z,
+    xend = `car name`),
+       color = "black") +
+ geom_text(color="white", size=2) +
+ labs(title="Diverging Lollipop Chart",
+    subtitle="Normalized mileage from 'mtcars': Lollipop") +
+ ylim(-2.5, 2.5) +
+ coord_flip()
diverging lollipop chart

Diverging Dot Plot

以类似方式创建分歧点图,其中点表示散布图中更大维度中的点。

> ggplot(mtcars, aes(x=`car name`, y=mpg_z, label=mpg_z)) +
+  geom_point(stat='identity', aes(col=mpg_type), size=6) +
+  scale_color_manual(name="Mileage",
+     labels = c("Above Average", "Below Average"),
+     values = c("above"="#00ba38", "below"="#f8766d")) +
+ geom_text(color="white", size=2) +
+ labs(title="Diverging Dot Plot",
+     subtitle="Normalized mileage from 'mtcars': Dotplot") +
+ ylim(-2.5, 2.5) +
+ coord_flip()
diverging dot plot

这里,图例用绿色和红色表示“高于平均值”和“低于平均值”的值。点图传递静态信息。原则与分歧条形图中的相同,只是使用点。

ggplot2 - Themes

在本章中,我们将专注于使用自定义主题,它用于改变工作区的观感。我们将使用 “ggthemes” 软件包来了解 R 工作区中的主题管理概念。

让我们实施以下步骤,以在所提数据集内使用所需的主题。

GGTHEMES

使用 R 工作空间中所需的软件包安装 “ggthemes” 软件包。

> install.packages("ggthemes")
> Library(ggthemes)
ggthemes

实施新主题以生成带有生产年份和排量的制造商图例。

> library(ggthemes)
> ggplot(mpg, aes(year, displ, color=factor(manufacturer)))+
+ geom_point()+ggtitle("This plot looks a lot different from the default")+
+ theme_economist()+scale_colour_economist()
implement new theme

可以观察到,以前的主题管理中的刻度文本、图例和其他元素的默认大小有点小。可以非常容易地一次性更改所有文本元素的大小。这可以通过创建一个自定义主题来完成,我们可以在下面的步骤中观察到,所有元素的大小相对于基本大小 (rel())。

> theme_set(theme_gray(base_size = 30))
> ggplot(mpg, aes(x=year, y=class))+geom_point(color="red")
implement new theme1

ggplot2 - Multi Panel Plots

多面板绘图表示在单个绘图中同时创建多个绘图。我们将使用 par() 函数通过传递图形参数 mfrow 和 mfcol 将多个绘图放在单个绘图中。

在这里,我们将使用“AirQuality”数据集来实现多面板绘图。让我们首先了解数据集以了解多面板绘图的创建。该数据集包含部署在意大利城市现场的燃气多传感器设备的响应。小时响应平均值与认证分析仪的燃气浓度引用一起记录。

Insight of par() function

了解 par() 函数以创建所需多面板绘图的维度。

> par(mfrow=c(1,2))
> # set the plotting area into a 1*2 array

这创建了一个维度为 1*2 的空白绘图。

insight of par function

现在使用以下命令创建所提数据集的直方图和饼图。相同的现象可以用图形参数 mfcol 实现。

Creating Multi Panel Plots

两者之间的唯一区别在于,mfrow 按行填充子图区域,而 mfcol 按列填充子图区域。

> Temperature <- airquality$Temp
> Ozone <- airquality$Ozone
> par(mfrow=c(2,2))
> hist(Temperature)
> boxplot(Temperature, horizontal=TRUE)
> hist(Ozone)
> boxplot(Ozone, horizontal=TRUE)
creating multi panel plots

基本上,箱线图和条形图是在单个窗口中创建的,从而创建了多面板绘图。

具有 par 函数中维度变化的相同绘图如下所示 −

par(mfcol = c(2, 2))
boxplots and barplots

ggplot2 - Multiple Plots

在本章中,我们将专注于创建多重图表,这些图表可以进一步用于创建三维图表。所涵盖的图表列表包括 -

  1. Density Plot

  2. Box Plot

  3. Dot Plot

  4. Violin Plot

我们将使用前面章节中使用的“mpg”数据集。此数据集提供了 1999 年和 2008 年 38 款流行汽车车型的燃油经济性数据。该数据集随 ggplot2 软件包一同提供。遵循以下步骤来创建不同类型的图表非常重要。

> # Load Modules
> library(ggplot2)
>
> # Dataset
> head(mpg)
# A tibble: 6 x 11
manufacturer  model   displ   year   cyl   trans       drv   cty   hwy  fl   class
<chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
1 audi        a4      1.8     1999   4     auto(l5)    f     18    29   p    compa~
2 audi        a4      1.8     1999   4     manual(m5)  f     21    29   p    compa~
3 audi        a4      2       2008   4     manual(m6)  f     20    31   p    compa~
4 audi        a4      2       2008   4     auto(av)    f     21    30   p    compa~
5 audi        a4      2.8     1999   6     auto(l5)    f     16    26   p    compa~
6 audi        a4      2.8     1999   6     manual(m5)  f     18    26   p    compa~

Density Plot

密度图是所述数据集中任何数值变量分布的图形表示。它使用核密度估计来显示变量的概率密度函数。

“ggplot2”包中包含一个名为 geom_density() 的函数,用于创建密度图。

我们将执行以下命令来创建密度图 -

> p −- ggplot(mpg, aes(cty)) +
+  geom_density(aes(fill=factor(cyl)), alpha=0.8)
> p

我们可以从创建的图表中观察到各种密度 -

density plot

我们也可以重命名 x 和 y 轴来生成绘图,它保持了更大的清晰度,并用不同的颜色组合包含标题和图例。

> p + labs(title="Density plot",
+    subtitle="City Mileage Grouped by Number of cylinders",
+    caption="Source: mpg",
+    x="City Mileage",
+    fill="# Cylinders")
density plot1

Box Plot

箱线图也称为盒须图,它表示数据的五数概括。五数概括包括最小值、第一四分位数、中位数、第三四分位数和最大值。通过箱线图中间部分的竖线表示为“中位数”。

我们还可以使用以下命令生成箱线图 −

> p <- ggplot(mpg, aes(class, cty)) +
+  geom_boxplot(varwidth=T, fill="blue")
> p + labs(title="A Box plot Example",
+    subtitle="Mileage by Class",
+    caption="MPG Dataset",
+    x="Class",
+    y="Mileage")
>p

这里,我们根据 class 和 cty 的属性创建箱线图。

box plot

Dot Plot

点图与散点图很类似,它们的区别只是维度。在这一部分中,我们将点图添加到现有的箱线图中,更加直观、清晰。

可以使用以下命令生成箱线图 −

> p <- ggplot(mpg, aes(manufacturer, cty)) +
+    geom_boxplot() +
+    theme(axis.text.x = element_text(angle=65, vjust=0.6))
> p
dot plot

点图的生成如下 −

> p + geom_dotplot(binaxis='y',
+    stackdir='center',
+    dotsize = .5
+    )
dot plot1

Violin Plot

小提琴图的生成方式也很类似,只是将箱形改成了小提琴形状。输出如下 −

> p <- ggplot(mpg, aes(class, cty))
>
> p + geom_violin()
violin plot

ggplot2 - Background Colors

有办法使用如下所示的一个函数更改您绘图的整个外观。但是,如果您只是想更改面板的背景颜色,则可以使用以下内容 −

Implementing Panel background

我们可以使用以下命令更改背景颜色,该命令有助于更改面板 (panel.background) −

> ggplot(iris, aes(Sepal.Length, Species))+geom_point(color="firebrick")+
+ theme(panel.background = element_rect(fill = 'grey75'))

颜色的变化在下面的图片中清晰显示 −

implementing panel background

Implementing Panel.grid.major

我们可以使用命令中提到的属性“panel.grid.major”来更改网格线−

> ggplot(iris, aes(Sepal.Length, Species))+geom_point(color="firebrick")+
+    theme(panel.background = element_rect(fill = 'grey75'),
+    panel.grid.major = element_line(colour = "orange", size=2),
+    panel.grid.minor = element_line(colour = "blue"))
implementing panel grid major

我们甚至可以使用下面提到的“plot.background”属性来更改绘图背景,特别是排除面板−

ggplot(iris, aes(Sepal.Length, Species))+geom_point(color="firebrick")+
+   theme(plot.background = element_rect(fill = 'pink'))
plot background

ggplot2 - Time Series

时间序列是一个图形绘图,它以特定时间顺序表示一系列数据点。时间序列是在相等时间间隔的连续序列下获取的序列。时间序列可以被认为是离散时间数据。我们在本章中将使用的数据集是“economics”数据集,其中包含美国经济时间序列的所有详细信息。

数据框包括以下属性,如下所示 −

Date

Month of data collection

Psavert

Personal savings rate

Pce

Personal consumption expenditure

Unemploy

失业人数(千人)

Unempmed

Median duration of unemployment

Pop

Total population in thousands

加载必需的包并将默认主题设置为创建时序。

> library(ggplot2)
> theme_set(theme_minimal())
> # Demo dataset
> head(economics)
# A tibble: 6 x 6
date           pce            pop          psavert       uempmed       unemploy
<date>         <dbl>         <dbl>         <dbl>         <dbl>         <dbl>
1 1967-07-01    507.          198712        12.6          4.5           2944
2 1967-08-01    510.          198911        12.6          4.7           2945
3 1967-09-01    516.          199113        11.9          4.6           2958
4 1967-10-01    512.          199311        12.9          4.9           3143
5 1967-11-01    517.          199498        12.8          4.7           3066
6 1967-12-01    525.          199657        11.8          4.8           3018

创建一个基本折线图来创建时序结构。

> # Basic line plot
> ggplot(data = economics, aes(x = date, y = pop))+
+ geom_line(color = "#00AFBB", size = 2)
time series structure

我们可以使用以下命令绘制数据的子集 -

> # Plot a subset of the data
> ss <- subset(economics, date > as.Date("2006-1-1"))
> ggplot(data = ss, aes(x = date, y = pop)) +
+ geom_line(color = "#FC4E07", size = 2)
subset of data

Creating Time Series

这里我们将根据日期绘制变量 psavert 和 uempmed。这里我们必须使用 tidyr 包重新整形数据。这可以通过在同一列(新列)中折叠 psavert 和 uempmed 值来实现。R 函数:gather()[tidyr]。下一步涉及创建具有级别 = psavert 和 uempmed 的分组变量。

> library(tidyr)
> library(dplyr)
Attaching package: ‘dplyr’
The following object is masked from ‘package:ggplot2’: vars
The following objects are masked from ‘package:stats’: filter, lag
The following objects are masked from ‘package:base’: intersect, setdiff, setequal, union
> df <- economics %>%
+    select(date, psavert, uempmed) %>%
+    gather(key = "variable", value = "value", -date)
> head(df, 3)
# A tibble: 3 x 3
date          variable     value
<date> <chr>   <dbl>
1 1967-07-01   psavert       12.6
2 1967-08-01   psavert       12.6
3 1967-09-01   psavert       11.9

使用以下命令创建多条折线图以查看“psavert”和“unempmed”之间的关系 -

> ggplot(df, aes(x = date, y = value)) +
+    geom_line(aes(color = variable), size = 1) +
+    scale_color_manual(values = c("#00AFBB", "#E7B800")) +
+    theme_minimal()
multiple line plots