ggplot学习笔记(一)

ggplot2的作图一般步骤为:

准备数据,一般为数据框, 且一般为长表, 即每个观测时间占一行, 每个观测变量占一列。

将数据输入到ggplot()函数中, 并指定参与作图的每个变量分别映射到哪些图形特性, 比如映射为x坐标、y坐标、颜色、形状等。这些映射称为aesthetic mappings或aesthetics。

选择一个合适的图形类型, 函数名以geom_开头, 如geom_point()表示散点图。图形类型简称为geom。将ggplot()部分与geom_xxx()部分用加号连接。到此已经可以作图,下面的步骤是进一步的细化设定。

设定适当的坐标系统, 如coord_cartesian(), scale_x_log10()等。仍用加号连接。

设定标题和图例位置等,如labs()。仍用加号连接。

这个流程的一个大致的模板为:

p <- ggplot(data=<输入数据框>,mapping=aes(<维度>=<变量名>,<维度>=<变量名>,<...>))p + geom_<图形类型>(<...>) +scale_<映射>_<类型>(<...>) +coord_<类型>(<...>) +labs(<...>)

其中<...>表示额外的选项。变量p包含做出的图形的所有数据与设定, 变量名可以任意取。

一、散点图

数据选用gapminder包中和socviz包中的数据集。

install.packages('gapminder')library(gapminder)head(gapminder,20)

# A tibble: 20 x 6countrycontinent  year lifeExp      pop gdpPercap              1Afghanistan Asia      1952    28.8  8425333      779.2Afghanistan Asia      1957    30.3  9240934      821.3Afghanistan Asia      1962    32.0 10267083      853.4Afghanistan Asia      1967    34.0 11537966      836.5Afghanistan Asia      1972    36.1 13079460      740.6Afghanistan Asia      1977    38.4 14880372      786.7Afghanistan Asia      1982    39.9 12881816      978.8Afghanistan Asia      1987    40.8 13867957      852.9Afghanistan Asia      1992    41.7 16317921      649.10Afghanistan Asia      1997    41.8 22227415      635.11Afghanistan Asia      2002    42.1 25268405      727.12Afghanistan Asia      2007    43.8 31889923      975.13Albania    Europe    1952    55.2  1282697    1601.14Albania    Europe    1957    59.3  1476505    1942.15Albania    Europe    1962    64.8  1728137    2313.16Albania    Europe    1967    66.2  1984060    2760.17Albania    Europe    1972    67.7  2263554    3313.18Albania    Europe    1977    68.9  2509048    3533.19Albania    Europe    1982    70.4  2780097    3631.20Albania    Europe    1987    72    3075321    3739.

socviz的数据集需要从github上下载

devtools::install_github("kjhealy/socviz")

如果连接不上,也可自行下载后使用下列命令安装

devtools::install_local("本地路径")

查看前20行数据

head(gss_sm, 20)

以gapminder数据集作为输入数据, 做出简单的散点图, 并逐步进行改善。这个数据集有多个国家在多个年份的期望寿命与人均GDP值, 作期望寿命对人均GDP的散点图, 每个国家的每个年份作为一个点。散点图最重要的映射是x轴与y轴两个维度。

首先调用ggplot()函数, 指定数据集, 将人均GDP映射到x轴, 将期望寿命映射到y轴, 结果保存为一个R变量:

p<-ggplot(data=gapminder,mapping=aes(x=gdpPercap,y=lifeExp))

x、y轴是最常见的映射, 也可以将变量映射为颜色、符号、线型等, 这时不需要指定具体的颜色、符号、线型, 而是将变量映射为这些图形元素类型。

ggplot()的调用中, 可以省略data =, mapping =, x =, y =, 写成:

p<- ggplot(gapminder, aes(gdpPercap, lifeExp))

在如上指定了数据和映射后, 只要用geom_xxx()指定一个图形类型, 并与ggplot()的结果用加号连接就可以作图了,如:

p+ geom_point()

实际上,上面的程序等同于调用print(p + geom_point())。在R函数中或者在循环中需要显式地调用print(), 否则不会显示结果。当载入了tidyverse系统时可以写成(p + geom_point()) %>% print()。

指定数据集、指定映射、选择适当的图形类型就可以做出基本的图形, 随后可以逐步对坐标系、坐标系刻度、标签与图例、配色等进行改善。实际上,ggplot2包已经提供了十分合理的预设值, 用户只要进行一些必要的改动即可。

作图步骤之间用加号连接,这是ggplot包特有的语法。例如, 用相同的映射做出拟合曲线图:

p+ geom_smooth()

##`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'

用相同的映射做出散点图并叠加拟合曲线图:

p+ geom_point() + geom_smooth()

##`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'

geom_smooth()的默认设置调用了gam()函数来拟合曲线, 可以用geom_smooth()的参数选择不同的拟合方法, 如直线拟合:

p+ geom_point() + geom_smooth(method="lm")

##`geom_smooth()`using formula'y ~ x'

注意geom_xxx()函数计算所需的变量值是从ggplot()函数保存在变量p中的信息提取的。

在以上的所有图形中, x轴变量(人均GDP)分布非正态,严重右偏, 使得大多数散点重叠地分布在直角坐标系的左下角。将x轴用对数刻度可以改善, 函数为scale_x_log10():

p+ geom_point() +geom_smooth(method="gam") +  scale_x_log10()

##`geom_smooth()`using formula'y ~ s(x, bs = "cs")'

scale_xxx()的labels选项指定如何标出坐标刻度数字, 参数值是一个函数对象, 如果scales包中找不到适当的功能, 可以自定义一个函数将数值转换为字符串。scales包提供了comma, date, dollar, math,number, ordinal, pvalue, scientific,time等坐标刻度值转换函数。

你可能感兴趣的:(ggplot学习笔记(一))