Ggplot2 简明教程
ggplot2 - Introduction
ggplot2 是一个 R 包,专门用于数据可视化并提供最佳探索性数据分析。它提供精美的、无忧无虑的图,可以处理细小的细节,例如绘制图例并表示它们。图可以迭代创建并稍后编辑。此包被设计为以分层方式工作,从一个图层开始,该图层显示使用 R 进行探索性数据分析期间收集的原始数据,然后添加标注和统计摘要的图层。
即使是最有经验的 R 用户在创建精美的图形时也需要帮助。这个库是用于在 R 中创建图形的非凡工具,但即使在多年几乎每天使用之后,我们仍然需要参考我们的备忘单。
此包使用称为“图形语法”的深度语法,它由一组可通过多种方式创建的独立组件组成。“图形语法” 是使 ggplot2 非常强大的唯一原因,因为 R 开发人员不局限于其他包中使用的预先指定图形集。语法包含一组简单核心理论和原则。
2005 年,Wilkinson 创建或更确切地说是创立了图形语法的概念,以描述包含在所有统计图形之间的深度特征。它专注于图层原语,包括改编嵌入 R 的功能。
Relationship between “Grammar of Graphics” and R
它告诉用户或开发者,统计图形用于将数据映射到美学属性,如点的颜色、形状、大小,线的颜色、形状、大小和条形图的颜色、形状、大小等涉及的几何对象。图表还可能包含涉及的数据的各种统计转换,这些转换绘制在上述坐标系中。它还包括一个称为“分面”的功能,通常用于针对上述数据集的不同子集创建相同图表。R 包含各种内置数据集。这些独立组件的组合完全构成了一个特定图形。
现在让我们关注可参考语法创建的不同类型的图表 -
ggplot2 - Installation of R
R 软件包具有各种功能,例如分析统计信息、深入研究地理空间数据或简单创建基本报告。
R 软件包可以定义为以明确格式定义的 R 函数、数据和编译代码。存储软件包的文件夹或目录称为库。
如上图所示,libPaths() 是显示位于库中的库的函数,而函数 library 显示存储在库中的软件包。
R 包含许多操作软件包的函数。我们将重点关注三个主要函数,它们被主要使用,它们是:
-
Installing Package
-
Loading a Package
-
Learning about Package
在 R 中安装软件包的函数语法为:
Install.packages(“<package-name>”)
安装软件包的简单演示如下所示。考虑我们需要安装数据可视化库“ggplot2”,使用以下语法:
Install.packages(“ggplot2”)
若要加载特定软件包,我们需要遵循下面提到的语法:
Library(<package-name>)
ggplot2 的用法同上,如下所示:
library(“ggplot2”)
输出如下图所示:
为了理解所需软件包和基本功能的需要,R 提供了帮助函数,该函数提供了已安装软件包的完整详细信息。
以下提及完整句法 -
help(ggplot2)
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)
下面给出了数据集包括的属性列表 -
Using attributes for sample plot
使用 ggplot2 以更简单的方式绘制鸢尾花数据集图表涉及以下语法 -
# Plot
IrisPlot <- ggplot(iris, aes(Sepal.Length, Petal.Length, colour=Species))
+ geom_point()
print(IrisPlot)
第一个参数将数据集作为输入,第二个参数指定数据库中需要绘制的图例和属性。在此示例中,我们使用图例 Species。Geom_point() 表示散点图,将在后面的章节中详细讨论。
生成的输出如下 -
这里我们可以修改标题、x 标签和 y 标签,这意味着 x 轴和 y 轴标签采用给定的系统格式 -
print(IrisPlot + labs(y="Petal length (cm)", x = "Sepal length (cm)")
+ ggtitle("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
现在让我们了解美学映射“ggplot2”的 aes 的功能。美学映射描述了绘图所需的可变结构以及应该在单个图层格式中管理的数据。
输出如下 −
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")
为添加文本生成的输出如下 -
使用已提及的坐标重复特定文本会产生以下输出。该文本由 4 到 6 的 x 坐标和 5 到 7 的 y 坐标生成 −
下面提供了特定区域输出的分割和突出显示 −
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
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
如果你观察该绘图,图例创建在最左角,如下所示 −
在此,图例包括给定数据集的各种物种类型。
Changing attributes for legends
我们可以借助属性 “legend.position” 来移除图例,并且可以获得适当的输出 −
> # Remove Legend
> p + theme(legend.position="none")
我们还可以使用属性 “element_blank()” 隐藏图例的标题,如下所示 −
> # Hide the legend title
> p + theme(legend.title=element_blank())
我们还可以根据需要使用图例位置。此属性用于生成准确的绘图图例。
> #Change the legend position
> p + theme(legend.position="top")
>
> p + theme(legend.position="bottom")
Top 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"))
下面给出了生成的输出 −
后续章节将重点介绍不同类型的绘图以及各种背景属性,例如颜色、主题以及每种属性对于数据科学的意义。
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()
Adding attributes
我们可以使用 geom_point() 函数中的一个名为 shape 的属性更改点的形状。
> # Change the shape of points
> ggplot(iris, aes(Sepal.Length, Petal.Length)) +
+ geom_point(shape=1)
我们可以为点添加颜色,添加在所需的散点图中。
> ggplot(iris, aes(Sepal.Length, Petal.Length, colour=Species)) +
+ geom_point(shape=1)
在此示例中,我们根据图例中提到的物种创建了颜色。这三个物种在这个提到的图中有着独特的区别。
现在,我们将重点放在建立变量之间的关系上。
> 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)
我们还可以添加一条无阴影置信区域的回归线,其语法如下所示:
># 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)
阴影区域表示除了置信区域之外的事物。
ggplot2 - Bar Plots & Histograms
条形图以矩形方式呈现分类数据。条形图可以垂直和水平绘制。高度或长度与图形中表示的值成正比。条形图的 x 轴和 y 轴指定包含在特定数据集中的类别。
直方图是条形图,它用提及数据集分布的清晰图片表示原始数据。
在本章中,我们将借助 ggplot2 重点关注条形图和直方图的创建。
Understanding MPG Dataset
让我们了解将使用的数据集。Mpg 数据集包含美国环保局在以下链接中提供的燃油经济性数据的子集 -
它由 1999 年到 2008 年间每年都发布新版本的车型组成。这被用作汽车流行程度的衡量标准。
执行以下命令来了解数据集所需的属性列表。
> library(ggplot2)
附加包是 ggplot2。
以下对象已被掩盖 by 。GlobalEnv −
mpg
Creating Bar Count Plot
条形计数图可以使用下面提到的绘图创建 −
> # A bar count plot
> p <- ggplot(mpg, aes(x=factor(cyl)))+
+ geom_bar(stat="count")
> p
geom_bar() 是用于创建条形图的函数。它获取名为 count 的统计值的属性。
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")
示例图表可以使用以下命令创建 −
> 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
如果您观察输出,图表不会按照如下所示的圆形方式创建 −
ggplot2 - Marginal Plots
在本章中,我们将讨论边缘图。
Understanding Marginal Plots
边缘图用于评估两个变量之间的关系并检查其分布。当我们谈论创建边缘图时,它们不过是散点图,在相应的 x 轴和 y 轴的边距中包含直方图、箱形图或点图。
以下步骤将用于使用包 “ggExtra” 使用 R 创建边缘图。此包旨在增强 “ggplot2” 包的功能,并包含用于创建成功边缘图的各种函数。
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~
>
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
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 函数计算标准化数据集。我们还可以使用高于和低于平均值标记获取“类型”功能的值。稍后,我们对值进行排序以创建所需数据集。
收到的输出如下 -
将值转换为要素以在特定绘图中保留排序顺序,如下所述 -
> # convert to factor to retain sorted order in plot.
> mtcars$`car name` <- factor(mtcars$`car name`, levels = mtcars$`car name`)
获得的输出如下 -
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 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 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()
这里,图例用绿色和红色表示“高于平均值”和“低于平均值”的值。点图传递静态信息。原则与分歧条形图中的相同,只是使用点。
ggplot2 - Themes
在本章中,我们将专注于使用自定义主题,它用于改变工作区的观感。我们将使用 “ggthemes” 软件包来了解 R 工作区中的主题管理概念。
让我们实施以下步骤,以在所提数据集内使用所需的主题。
GGTHEMES
使用 R 工作空间中所需的软件包安装 “ggthemes” 软件包。
> install.packages("ggthemes")
> Library(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()
可以观察到,以前的主题管理中的刻度文本、图例和其他元素的默认大小有点小。可以非常容易地一次性更改所有文本元素的大小。这可以通过创建一个自定义主题来完成,我们可以在下面的步骤中观察到,所有元素的大小相对于基本大小 (rel())。
> theme_set(theme_gray(base_size = 30))
> ggplot(mpg, aes(x=year, y=class))+geom_point(color="red")
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 的空白绘图。
现在使用以下命令创建所提数据集的直方图和饼图。相同的现象可以用图形参数 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)
基本上,箱线图和条形图是在单个窗口中创建的,从而创建了多面板绘图。
具有 par 函数中维度变化的相同绘图如下所示 −
par(mfcol = c(2, 2))
ggplot2 - Multiple Plots
在本章中,我们将专注于创建多重图表,这些图表可以进一步用于创建三维图表。所涵盖的图表列表包括 -
-
Density Plot
-
Box Plot
-
Dot Plot
-
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
我们可以从创建的图表中观察到各种密度 -
我们也可以重命名 x 和 y 轴来生成绘图,它保持了更大的清晰度,并用不同的颜色组合包含标题和图例。
> p + labs(title="Density plot",
+ subtitle="City Mileage Grouped by Number of cylinders",
+ caption="Source: mpg",
+ x="City Mileage",
+ fill="# Cylinders")
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 的属性创建箱线图。
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.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"))
我们甚至可以使用下面提到的“plot.background”属性来更改绘图背景,特别是排除面板−
ggplot(iris, aes(Sepal.Length, Species))+geom_point(color="firebrick")+
+ theme(plot.background = element_rect(fill = 'pink'))
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)
我们可以使用以下命令绘制数据的子集 -
> # 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)
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()