一、基本介绍
R语言是一种开源的编程语言,具有数据分析、数据可视化等功能。ggplot2是R语言的一个可视化包,它是由Hadley Wickham开发的。ggplot2提供了建立高级可视化的统一框架,支持灵活、易于理解的语法,可以帮助用户更好地展现数据,从而更好地理解数据。ggplot2具有以下特点:
1、多层面的图形表示:使用ggplot2可以将多个层面的图形元素组合起来,形成更加精确和可读性更强的图表。
2、分层显示:ggplot2支持自由组合坐标系、图层和数据变换等基本元素,以便让用户自由组合,并耦合数据的视觉、几何形状、统计变换等多个维度数据,进而形成可交互、可探索的数据可视化。
3、数据转换:ggplot2允许用户对数据集进行各种类型的转换,使之更加适合于可视化操作。
4、自由定制:ggplot2具有高度灵活的图形表示方式,允许用户进行自由的定制化操作,包括对颜色、字体、形状、比例尺等的设置。
library(ggplot2)
data(mpg)
ggplot(mpg, aes(x=cty, y=hwy, color=class)) + geom_point() + theme_light()
二、基本语法
ggplot2的基本语法包括数据、图层、图形等元素。其中,数据是必需的,而图形和图层是可选的。ggplot2语法的基本结构如下:
ggplot(data = NULL, mapping = aes(), na.rm = FALSE, inherit.aes = TRUE) +
layer(mapping = NULL, data = NULL, stat = NULL, geom = NULL, position = NULL,
show.legend = NA, inherit.aes = TRUE, ...) +
coord_xy(xlim = NULL, ylim = NULL, expand = TRUE, clip = "on", ...)
其中,ggplot()中的data参数用于指定数据集,mapping参数用于指定数据映射到图形属性上,如x轴、y轴、颜色等。映射的属性要使用aes()函数来设置。layer()函数用于添加图层,其中的参数用于指定图层的几何形状、统计方法、数据、位置等一系列元素。coord_xy()函数用于设置坐标轴的范围、网格、标签等属性。
#绘制饼图
library(ggplot2)
data(diamonds)
ggplot(data=diamonds, aes(x=cut, fill=cut)) + geom_bar()
三、基本图形映射
ggplot2的基本图形包含散点图、折线图、多层柱状图、饼图等。这些图形均可通过映射数据进行设置,以达到图形美观、易读的目的。
1、散点图
散点图是一种简单的图形类型,用于显示两个数值变量之间的关系。在ggplot2中,使用geom_point()函数绘制散点图。对于离散型变量,还可以通过设置点的大小、颜色、形状等来区分不同的类别。
library(ggplot2)
data(mpg)
ggplot(mpg, aes(x=cty, y=hwy, color=class)) +
geom_point(size= 3, alpha = 0.5, shape = 21) + theme_light()
2、直方图
直方图是一种用于显示变量分布的图形类型。在ggplot2中,使用geom_histogram()函数绘制直方图。可以通过设置参数来调整柱子的宽度、颜色、边界、坐标轴、分段数量等。
library(ggplot2)
data(diamonds)
ggplot(diamonds, aes(x=price, fill=cut)) +
geom_histogram(alpha=0.5, bins = 30, position = "stack") + theme_light()
3、折线图
折线图是一种研究变量随时间变化的趋势的图形类型。在ggplot2中,使用geom_line()函数绘制折线图。可以通过设置参数来调整线条的颜色、形状、粗细、点数的数量等。
library(ggplot2)
data(mpg)
ggplot(mpg, aes(x=displ, y=hwy)) +
geom_line(color="red", size = 0.8, linetype = 2, alpha=0.8) +
theme_light()
4、条形图
条形图是一种用于显示分类数据之间差异的图形类型。在ggplot2中,使用geom_bar()函数绘制条形图。可以通过设置参数来调整柱子的宽度、颜色、边界、坐标轴、排序等。
library(ggplot2)
data(diamonds)
ggplot(diamonds, aes(x=cut, fill=cut)) +
geom_bar(position = "dodge", alpha=0.5, width=0.8) + theme_light()
5、多层柱状图
多层柱状图是一种用于显示分类变量之间关系的图表。在ggplot2中,可以使用位置调整器、fill参数、color参数等参数来组合不同的变量,形成不同的图表形式。
library(ggplot2)
data(diamonds)
ggplot(diamonds, aes(x=carat, fill=cut)) +
geom_histogram(position = "stack", alpha=0.5, bins = 50) + theme_light()
四、常用设置
ggplot2中提供了许多操作,可以改变图表的基本样式,如调整坐标轴范围、刻度、标签、背景色、边框、主题等。下面列举一些常用的操作。
1、坐标轴设置
坐标轴设置是控制图表范围和密度的重要方式。在ggplot2中,可以使用ylim()、xlim()函数分别改变y轴和x轴的最大和最小范围。可以使用scale_x_continuous()、scale_y_continuous()函数来调整刻度、标签以及网格线。可以使用coord_flip()函数来交换坐标轴,对改善观察角度有一定的帮助。
library(ggplot2)
data(mpg)
g <- ggplot(mpg, aes(x=cty, y=hwy)) + geom_point() + theme_light()
g + scale_y_continuous(limits = c(0, 40), breaks=seq(0, 40, 5),
labels=c("0", "5","10","15","20","25","30","35","40")) +
scale_x_continuous(limits = c(0, 50), breaks=seq(0, 50, 10),
labels=c("0", "10","20","30","40","50")) +
coord_flip()
2、标签设置
标签设置用于添加标题、副标题、轴标签、图例等等描述性的文本。在ggplot2中,可以使用ggtitle()、xlab()、ylab()、labs()函数来添加标签。同时也可以使用theme()函数来调整标题位置、颜色、大小等属性。
library(ggplot2)
data(mpg)
ggplot(mpg, aes(x=cty, y=hwy, color=class)) +
geom_point() +
ggtitle("城市里程与公路里程对比图") +
xlab("城市里程") +
ylab("公路里程") +
theme(plot.title = element_text(size=20, color="blue", face="bold", hjust=0.5),
axis.title.x = element_text(color="black", size=16, face="bold"),
axis.title.y=element_text(color="black", size=16, face="bold"))
3、主题设置
主题设置是控制ggplot2图表整体风格特征的方式。在ggplot2中,可以使用theme()函数来调整各种主题元素。ggplot2中有多种主题可供选择,如theme_bw()、theme_linedraw()、theme_light()、theme_dark()等。
library(ggplot2)
data(mpg)
ggplot(mpg, aes(x=cty, y=hwy, color=class)) +
geom_point() +
ggtitle("城市里程与公路里程对比图") +
xlab("城市里程") +
ylab("公路里程") +
theme_light()
五、进阶操作
ggplot2提供了许多高级操作,可以更好地呈现和解释数据。在这里,我们将介绍一些常见的进阶操作。
1、分组和堆叠
分组和堆叠可以帮助我们更加直观地观察数据间的关系。在ggplot2中,分组通常使用aes()函数中的group参数来实现。而堆叠则可以使用fill参数和position_stack()函数来完成。
library(ggplot2)
data(diamonds)
ggplot(diamonds, aes(x=cut, fill=color)) +
geom_bar(position = "dodge", alpha=0.5) +
theme_light() +
ggtitle("宝石颜色差异") +
xlab("钻石切工质量") +
ylab("钻石数量") +
scale_fill_grey(start = 0.6)
2、绘制密度图
密度图可以用来显示数据分布的形状,可以使用ggplot2中的geom_density()函数来绘制。通过调整参数,可以实现平滑的曲线、不同颜色、透明度等操作。
library(ggplot2)
data(mpg)
ggplot(mpg, aes(x=cty, fill=class)) +
geom_density(alpha=0.5) +
theme_light()
3、使用facet_wrap()函数绘制多子图
有时候需要在同一张图中展示多个子图,这时可以使用facet_wrap()函数来实现。它可以将数据集中不同的子集分别绘制在不同的面板中,便于单独和整体考察。
library(ggplot2)
data(mpg)
ggplot(mpg, aes(x=cty, y=hwy)) +
geom_point() +
facet_wrap(~class, ncol=3) +
theme_light()
4、基于ggplot2进行交互式可视化
ggplot2自身无法生成交互式视图。但是我们可以通过ggiraph包、plotly包等扩展,实现基于ggplot2的交互式可视化操作。在本例中,我们使用ggiraph包实现交互式点击高亮出发的动态
